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(); } }
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("}}"); }