public void Parse(Definition.Definitions definitions, List <SyntaxTree> syntaxTrees, Microsoft.CodeAnalysis.CSharp.CSharpCompilation compilation) { this.definitions = definitions; this.compilation = compilation; foreach (var enumDef in definitions.Enums) { ParseEnum(enumDef); } foreach (var classDef in definitions.Classes) { ParseClass(classDef); } foreach (var def in definitions.Structs) { ParseStruct(def); } }
public override void Translate(string targetDir, Definition.Definitions definisions) { }
public abstract void Translate(string targetDir, Definition.Definitions definisions);
public override void Translate(string targetDir, Definition.Definitions definisions) { var sep = Path.DirectorySeparatorChar.ToString(); foreach (Definition.EnumDef o in definisions.Enums) { IndentDepth = 0; if (o.IsDefinedBySWIG) { continue; } var subDir = targetDir + string.Join(sep, o.Namespace.Split('.')); System.IO.Directory.CreateDirectory(subDir); var of = System.IO.File.CreateText(subDir + sep + o.Name + ".java"); if (o.Namespace != string.Empty) { Res.AppendFormat("package {0};\r\n\r\n", o.Namespace); } OutputEnum(o); of.Write(Res.ToString()); of.Close(); Res.Clear(); } foreach (var o in definisions.Classes) { IndentDepth = 0; if (o.IsDefinedBySWIG) { continue; } if (o.IsDefinedDefault) { continue; } if (!o.IsExported) { continue; } var subDir = targetDir + string.Join(sep, o.Namespace.Split('.')); System.IO.Directory.CreateDirectory(subDir); var of = System.IO.File.CreateText(subDir + sep + o.Name + ".java"); if (o.Namespace != string.Empty) { Res.AppendFormat("package {0};\r\n\r\n", o.Namespace); } OutputClass(o); of.Write(Res.ToString()); of.Close(); Res.Clear(); } foreach (var o in definisions.Structs) { if (o.IsDefinedDefault) { continue; } IndentDepth = 0; var subDir = targetDir + string.Join(sep, o.Namespace.Split('.')); System.IO.Directory.CreateDirectory(subDir); var of = System.IO.File.CreateText(subDir + sep + o.Name + ".java"); if (o.Namespace != string.Empty) { Res.AppendFormat("package {0};\r\n\r\n", o.Namespace); } OutputStruct(o); of.Write(Res.ToString()); of.Close(); Res.Clear(); } foreach (var o in definisions.Interfaces) { IndentDepth = 0; var subDir = targetDir + string.Join(sep, o.Namespace.Split('.')); System.IO.Directory.CreateDirectory(subDir); var of = System.IO.File.CreateText(subDir + sep + o.Name + ".java"); if (o.Namespace != string.Empty) { Res.AppendFormat("package {0};\r\n\r\n", o.Namespace); } OutputInterface(o); of.Write(Res.ToString()); of.Close(); Res.Clear(); } }
public Editor(Definition.Definitions definitions) { this.definitions = definitions; }
public Definition.Definitions Parse(string[] pathes, string[] dlls) { definitions = new Definition.Definitions(); List <SyntaxTree> syntaxTrees = new List <SyntaxTree>(); foreach (var path in pathes) { var tree = CSharpSyntaxTree.ParseText(System.IO.File.ReadAllText(path), null, path); syntaxTrees.Add(tree); } var assemblyPath = System.IO.Path.GetDirectoryName(typeof(object).Assembly.Location); var mscorelib = MetadataReference.CreateFromFile(System.IO.Path.Combine(assemblyPath, "mscorlib.dll")); var systemlib = MetadataReference.CreateFromFile(System.IO.Path.Combine(assemblyPath, "System.dll")); var systemCorelib = MetadataReference.CreateFromFile(System.IO.Path.Combine(assemblyPath, "System.Core.dll")); var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; List <MetadataReference> references = new List <MetadataReference>(); references.Add(mscorelib); references.Add(systemlib); references.Add(systemCorelib); // DLL読み込み foreach (var dll in dlls) { if (System.IO.File.Exists(dll)) { var lib = MetadataReference.CreateFromFile(dll); references.Add(lib); } } var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create( "Compilation", syntaxTrees: syntaxTrees.ToArray(), references: references.ToArray(), options: new Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions( Microsoft.CodeAnalysis.OutputKind.ConsoleApplication)); // デフォルト追加 definitions.AddDefault(); // 定義のみ取得 foreach (var tree in syntaxTrees) { var semanticModel = compilation.GetSemanticModel(tree); var decl = semanticModel.GetDeclarationDiagnostics(); var methodBodies = semanticModel.GetMethodBodyDiagnostics(); var root = semanticModel.SyntaxTree.GetRoot(); ParseRoot(root, semanticModel); } var blockParser = new BlockParser(); blockParser.Parse(definitions, syntaxTrees, compilation); return(definitions); }