Example #1
0
 public override string GenerateStringContent()
 {
     if (compiler == null)
     {
         return string.Empty;
     }
     else
     {
         MetaModelCSharpGenerator generator = new MetaModelCSharpGenerator(compiler.Model.CachedInstances);
         return generator.Generate();
     }
 }
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);
                    }
                }
            }
        }