示例#1
0
        void ParseStruct(Definition.StructDef def)
        {
            if (def.IsDefinedDefault)
            {
                return;
            }

            foreach (var field in def.Fields)
            {
                var semanticModel = compilation.GetSemanticModel(field.Internal.SyntaxTree);

                var v = field.Internal.Declaration.Variables[0];
                if (v.Initializer != null && v.Initializer.Value != null)
                {
                    field.Initializer = ParseExpression(v.Initializer.Value, semanticModel);
                }
            }

            foreach (var prop in def.Properties)
            {
                var semanticModel = compilation.GetSemanticModel(prop.Internal.SyntaxTree);

                if (prop.Getter != null && prop.Getter.Internal.Body != null)
                {
                    prop.Getter.Body = ParseStatement(prop.Getter.Internal.Body, semanticModel);
                }

                if (prop.Setter != null)
                {
                    prop.Setter.Body = ParseStatement(prop.Setter.Internal.Body, semanticModel);
                }
            }

            foreach (var method in def.Methods)
            {
                var semanticModel = compilation.GetSemanticModel(method.Internal.SyntaxTree);

                if (method.Internal.Body == null)
                {
                    continue;
                }

                var statement = ParseStatement(method.Internal.Body, semanticModel) as BlockStatement;
                method.Body = statement.Statements.ToList();
            }

            foreach (var cst in def.Constructors)
            {
                if (cst.Internal == null)
                {
                    continue;
                }

                var semanticModel = compilation.GetSemanticModel(cst.Internal.SyntaxTree);

                if (cst.Internal.Body == null)
                {
                    continue;
                }

                var statement = ParseStatement(cst.Internal.Body, semanticModel) as BlockStatement;
                cst.Body = statement.Statements.ToList();
            }

            foreach (var dst in def.Destructors)
            {
                if (dst.Internal == null)
                {
                    continue;
                }

                var semanticModel = compilation.GetSemanticModel(dst.Internal.SyntaxTree);

                if (dst.Internal.Body == null)
                {
                    continue;
                }

                var statement = ParseStatement(dst.Internal.Body, semanticModel) as BlockStatement;
                dst.Body = statement.Statements.ToList();
            }
        }
示例#2
0
        private void OutputStruct(Definition.StructDef ss)
        {
            Summary(ss.Summary);
            WriteLine("{1} class {0}", ss.Name, GetAccessLevel(ss.AccessLevel));
            WriteLine("{{");

            IndentDepth++;

            Res.Append(ss.UserCode);

            foreach (var f in ss.Fields)
            {
                OutputField(f);
            }

            foreach (var p in ss.Properties)
            {
                OutputProperty(p);
            }

            foreach (var m in ss.Methods)
            {
                OutputMethod(m);
            }

            // デフォルトコンストラクタ
            {
                var name        = ss.Name;
                var constructor = "public " + name + "() {{}}";
                WriteLine(constructor);
            }

            if (ss.Constructors != null)
            {
                foreach (var c in ss.Constructors)
                {
                    OutputConstructor(ss.Name, c);
                }
            }

            if (ss.Destructors != null)
            {
                foreach (var d in ss.Destructors)
                {
                    WriteLine("@Override");
                    WriteLine("protected void finalize() throws Throwable {{");
                    IndentDepth++;
                    if (ss.BaseTypes != null && ss.BaseTypes.Count > 0)
                    {
                        WriteLine("try {{ super.finalize(); }} finally {{");
                        IndentDepth++;
                    }
                    foreach (var s in d.Body)
                    {
                        OutputStatement(s);
                    }
                    if (ss.BaseTypes != null)
                    {
                        IndentDepth--;
                        WriteLine("}}");
                    }
                    IndentDepth--;
                    WriteLine("}}");
                }
            }

            IndentDepth--;
            WriteLine("}}");
        }