示例#1
0
        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);
            }
        }
示例#2
0
 public override void Translate(string targetDir, Definition.Definitions definisions)
 {
 }
示例#3
0
 public abstract void Translate(string targetDir, Definition.Definitions definisions);
示例#4
0
        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();
            }
        }
示例#5
0
 public Editor(Definition.Definitions definitions)
 {
     this.definitions = definitions;
 }
示例#6
0
        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);
        }