public static void WriteInstanceConstructor(HaxeWriter writer, ConstructorDeclarationSyntax ctorOpt) { writer.WriteIndent(); writer.Write("public function new("); Dictionary <string, ExpressionSyntax> deferredDefaults = null; if (ctorOpt != null) { var methodSymbol = Program.GetModel(ctorOpt).GetDeclaredSymbol(ctorOpt); WriteMethod.WriteParameters(writer, ctorOpt, methodSymbol, out deferredDefaults); } writer.Write(")\r\n"); writer.WriteOpenBrace(); if (deferredDefaults != null) { foreach (var defer in deferredDefaults) { writer.WriteLine("if (" + defer.Key + " == null)"); writer.Indent++; writer.WriteIndent(); writer.Write(defer.Key); writer.Write(" = "); Core.Write(writer, defer.Value); writer.Write(";\r\n"); writer.Indent--; } } if (!TypeState.Instance.DerivesFromObject) { if (ctorOpt == null || ctorOpt.Initializer == null) { writer.WriteLine("super();"); } else { if (ctorOpt.Initializer.ThisOrBaseKeyword.ToString() != "base") { throw new Exception("Constructor overloading not supported " + Utility.Descriptor(ctorOpt)); } writer.WriteIndent(); writer.Write("super("); bool first = true; foreach (var init in ctorOpt.Initializer.ArgumentList.Arguments) { if (first) { first = false; } else { writer.Write(", "); } Core.Write(writer, init.Expression); } writer.Write(");\r\n"); } } if (ctorOpt != null && ctorOpt.Body != null) { foreach (var statement in ctorOpt.Body.As <BlockSyntax>().Statements) { Core.Write(writer, statement); } TriviaProcessor.ProcessTrivias(writer, ctorOpt.Body.DescendantTrivia()); } writer.WriteCloseBrace(); }
public static void WriteInstanceConstructor(HaxeWriter writer, ConstructorDeclarationSyntax ctorOpt) { writer.WriteIndent(); writer.Write("public function new("); Dictionary <string, ExpressionSyntax> deferredDefaults = null; if (ctorOpt != null) { var methodSymbol = Program.GetModel(ctorOpt).GetDeclaredSymbol(ctorOpt); WriteMethod.WriteParameters(writer, ctorOpt, methodSymbol, out deferredDefaults); } writer.Write(")\r\n"); writer.WriteOpenBrace(); if (deferredDefaults != null) { foreach (var defer in deferredDefaults) { writer.WriteLine("if (" + defer.Key + " == null)"); writer.Indent++; writer.WriteIndent(); writer.Write(defer.Key); writer.Write(" = "); Core.Write(writer, defer.Value); writer.Write(";\r\n"); writer.Indent--; } } if (!TypeState.Instance.DerivesFromObject) { if (ctorOpt == null || ctorOpt.Initializer == null) { writer.WriteLine("super();"); } else { if (ctorOpt.Initializer.ThisOrBaseKeyword.ToString() != "base") { throw new Exception("Constructor overloading not supported " + Utility.Descriptor(ctorOpt)); } writer.WriteIndent(); writer.Write("super("); bool first = true; foreach (var init in ctorOpt.Initializer.ArgumentList.Arguments) { if (first) { first = false; } else { writer.Write(", "); } Core.Write(writer, init.Expression); } writer.Write(");\r\n"); } } foreach (var field in TypeState.Instance.AllMembers .OfType <BaseFieldDeclarationSyntax>() .Where(o => !o.Modifiers.Any(SyntaxKind.StaticKeyword)) .SelectMany(o => o.Declaration.Variables) .Where(o => (o.Initializer != null && !WriteField.IsConst(o.Parent.Parent.As <BaseFieldDeclarationSyntax>().Modifiers, o.Initializer, o.Parent.As <VariableDeclarationSyntax>().Type)) || (o.Initializer == null && GenerateInitializerForFieldWithoutInitializer(o.Parent.As <VariableDeclarationSyntax>().Type)) || o.Parent.Parent is EventFieldDeclarationSyntax)) { var parentType = field.Parent.As <VariableDeclarationSyntax>().Type; writer.WriteIndent(); writer.Write("this."); writer.Write(field.Identifier.ValueText); writer.Write(" = "); if (field.Parent.Parent is EventFieldDeclarationSyntax) { writer.Write("new CsEvent<"); writer.Write(TypeProcessor.ConvertType(parentType)); writer.Write(">()"); } else if (field.Initializer == null) { if (TypeProcessor.ValueToReference(parentType)) { writer.Write("new "); writer.Write(TypeProcessor.ConvertType(parentType)); writer.Write("()"); } else { writer.Write(TypeProcessor.DefaultValue(TypeProcessor.ConvertType(parentType))); } } else { Core.Write(writer, field.Initializer.Value); } writer.Write(";\r\n"); } if (ctorOpt != null && ctorOpt.Body != null) { foreach (var statement in ctorOpt.Body.As <BlockSyntax>().Statements) { Core.Write(writer, statement); } TriviaProcessor.ProcessTrivias(writer, ctorOpt.Body.DescendantTrivia()); } writer.WriteCloseBrace(); }