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