Example #1
0
 public MetaModelGenerator(string inputFilePath, string inputFileContents, string defaultNamespace)
     : base(inputFilePath, inputFileContents, defaultNamespace)
 {
     if (this.InputFileContents != null)
     {
         compiler = new MetaModelCompiler(this.InputFileContents, this.InputFileName);
         compiler.Compile();
     }
 }
Example #2
0
        private static void CompileMeta(string fileName, string outputFileName, bool javaOutput = false)
        {
            //Meta.MetaTypedElement.StaticInit();
            //Console.WriteLine(Meta.MetaTypedElement.TypeProperty);
            //Meta.StaticInit();
            //Console.WriteLine(Meta.Model);
                        
            //Model model = new Model();
            //using (new ModelContextScope(model))
            {
                string source;
                using (StreamReader reader = new StreamReader(fileName))
                {
                    source = reader.ReadToEnd();
                }
                MetaModelCompiler compiler = new MetaModelCompiler(source, fileName);
                compiler.Compile();
                Model model = compiler.Model;
                if (!compiler.Diagnostics.HasErrors())
                {
                    ModelExchange.SaveToFile("MetaModel.xmi", model);
                    using (StreamWriter writer = new StreamWriter(outputFileName))
                    {
                        if (javaOutput)
                        {
                            MetaModelJavaGenerator mmjg = new MetaModelJavaGenerator(model.Instances);
                            string javaSource = mmjg.Generate();
                            writer.WriteLine(javaSource);
                            string javaDir = @"k:\VersionControl\soal-java\src\metadslx.soal.runtime\src\generated\java\metadslx\languages\soal\";
                            //string javaDir = @"k:\VersionControl\meta-java\src\metadslx.core\src\generated\java\metadslx\core\";
                            //string javaDir = @"c:\Users\Balazs\Documents\git\meta-java\src\metadslx.core\src\generated\java\metadslx\core\";
                            MetaModel mm = (MetaModel)model.Instances.FirstOrDefault(obj => obj is MetaModel);
                            SaveToFile(javaDir + mm.Name + "Descriptor.java", mmjg.GenerateMetaModelDescriptor(mm));
                            SaveToFile(javaDir + mm.Name + "Instance.java", mmjg.GenerateMetaModelInstance(mm));
                            foreach (var enm in mm.Namespace.Declarations.OfType<MetaEnum>())
                            {
                                SaveToFile(javaDir + enm.Name + ".java", mmjg.GenerateEnum(enm));
                            }
                            foreach (var cls in mm.Namespace.Declarations.OfType<MetaClass>())
                            {
                                SaveToFile(javaDir + cls.Name + ".java", mmjg.GenerateInterface(cls));
                                SaveToFile(javaDir + cls.Name + "Impl.java", mmjg.GenerateInterfaceImpl(mm, cls));
                            }
                            SaveToFile(javaDir + mm.Name + "Factory.java", mmjg.GenerateFactory(mm));
                            SaveToFile(javaDir + mm.Name + "ImplementationProvider.java", mmjg.GenerateImplementationProvider(mm));
                            SaveToFile(javaDir + mm.Name + "ImplementationBase.java", mmjg.GenerateImplementationBase(mm));
                        }
                        else
                        {
                            MetaModelCSharpGenerator generator = new MetaModelCSharpGenerator(model.Instances);
                            writer.WriteLine(generator.Generate());
                        }
                    }
                }
                //PrintScope("", compiler.GlobalScope);
                Console.WriteLine("=");

                using (StreamWriter writer = new StreamWriter("symbols.txt"))
                {
                    foreach (var symbol in model.Instances)
                    {
                        ModelObject mo = symbol as ModelObject;
                        if (mo != null)
                        {
                            writer.WriteLine(mo);
                            Console.WriteLine(mo);
                            string leading = compiler.TriviaProvider.GetLeadingTrivia(mo);
                            string trailing = compiler.TriviaProvider.GetTrailingTrivia(mo);
                            if (!string.IsNullOrWhiteSpace(leading))
                            {
                                writer.WriteLine("  Leading trivia: "+leading);
                                Console.WriteLine("  Leading trivia: "+ leading);
                            }
                            if (!string.IsNullOrWhiteSpace(trailing))
                            {
                                writer.WriteLine("  Trailing trivia: "+ trailing);
                                Console.WriteLine("  Trailing trivia: "+trailing);
                            }
                            writer.WriteLine("  Parent=" + mo.MParent);
                            Console.WriteLine("  Parent=" + mo.MParent);
                            ModelProperty mp;
                            mp = mo.MFindProperty("Documentation");
                            if (mp != null)
                            {
                                writer.WriteLine("  Documentation=" + mo.MGet(mp));
                                Console.WriteLine("  Documentation=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Name");
                            if (mp != null)
                            {
                                writer.WriteLine("  Name=" + mo.MGet(mp));
                                Console.WriteLine("  Name=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Uri");
                            if (mp != null)
                            {
                                writer.WriteLine("  Uri=" + mo.MGet(mp));
                                Console.WriteLine("  Uri=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("IsAbstract");
                            if (mp != null)
                            {
                                writer.WriteLine("  IsAbstract=" + mo.MGet(mp));
                                Console.WriteLine("  IsAbstract=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("NoTypeError");
                            if (mp != null)
                            {
                                writer.WriteLine("  NoTypeError=" + mo.MGet(mp));
                                Console.WriteLine("  NoTypeError=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperties("ExpectedType").FirstOrDefault();
                            if (mp != null)
                            {
                                writer.WriteLine("  ExpectedType=" + mo.MGet(mp));
                                Console.WriteLine("  ExpectedType=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperties("Type").FirstOrDefault();
                            if (mp != null)
                            {
                                writer.WriteLine("  Type=" + mo.MGet(mp));
                                Console.WriteLine("  Type=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperties("InnerType").FirstOrDefault();
                            if (mp != null)
                            {
                                writer.WriteLine("  InnerType=" + mo.MGet(mp));
                                Console.WriteLine("  InnerType=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperties("ReturnType").FirstOrDefault();
                            if (mp != null)
                            {
                                writer.WriteLine("  ReturnType=" + mo.MGet(mp));
                                Console.WriteLine("  ReturnType=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Object");
                            if (mp != null)
                            {
                                writer.WriteLine("  Object=" + mo.MGet(mp));
                                Console.WriteLine("  Object=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Property");
                            if (mp != null)
                            {
                                writer.WriteLine("  Property=" + mo.MGet(mp));
                                Console.WriteLine("  Property=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Value");
                            if (mp != null)
                            {
                                writer.WriteLine("  Value=" + mo.MGet(mp));
                                Console.WriteLine("  Value=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("Definition");
                            if (mp != null)
                            {
                                writer.WriteLine("  Definition=" + mo.MGet(mp));
                                Console.WriteLine("  Definition=" + mo.MGet(mp));
                            }
                            mp = mo.MFindProperty("EnumLiterals");
                            if (mp != null)
                            {
                                writer.WriteLine("  EnumLiterals:");
                                Console.WriteLine("  EnumLiterals:");
                                foreach (var el in (IList<MetaEnumLiteral>)mo.MGet(mp))
                                {
                                    writer.WriteLine("    " + el);
                                    Console.WriteLine("    " + el);
                                }
                            }
                        }
                    }
                }

                using (StreamWriter writer = new StreamWriter("messages_meta.txt"))
                {
                    foreach (var msg in compiler.Diagnostics.GetMessages(true))
                    {
                        writer.WriteLine(msg);
                        Console.WriteLine(msg);
                    }
                }
            }
        }
 public override AuthoringScope ParseSource(ParseRequest req)
 {
     MetaModelLanguageSource source = (MetaModelLanguageSource)this.GetSource(req.FileName);
     switch (req.Reason)
     {
         case ParseReason.Check:
             // This is where you perform your syntax highlighting.
             // Parse entire source as given in req.Text.
             // Store results in the AuthoringScope object.
             string fileName = Path.GetFileName(req.FileName);
             string outputDir = Path.GetDirectoryName(req.FileName);
             MetaModelCompiler compiler = new MetaModelCompiler(req.Text, fileName);
             compiler.Compile();
             foreach (var msg in compiler.Diagnostics.GetMessages())
             {
                 TextSpan span = new TextSpan();
                 span.iStartLine = msg.TextSpan.StartLine - 1;
                 span.iEndLine = msg.TextSpan.EndLine - 1;
                 span.iStartIndex = msg.TextSpan.StartPosition - 1;
                 span.iEndIndex = msg.TextSpan.EndPosition - 1;
                 Severity severity = Severity.Error;
                 switch (msg.Severity)
                 {
                     case MetaDslx.Core.Severity.Error:
                         severity = Severity.Error;
                         break;
                     case MetaDslx.Core.Severity.Warning:
                         severity = Severity.Warning;
                         break;
                     case MetaDslx.Core.Severity.Info:
                         severity = Severity.Hint;
                         break;
                 }
                 req.Sink.AddError(req.FileName, msg.Message, span, severity);
             }
             break;
     }
     return new MetaModelLanguageAuthoringScope();
 }