public static void WriteCodeBlock(this IndentedTextWriter writer, Action <CodeBlockBuilder> codeBlockAction, bool hasBraces = true, bool singleStatement = false) { using (var builder = new CodeBlockBuilder(writer.GetSubWriter(!singleStatement), hasBraces, !singleStatement)) { codeBlockAction(builder); } }
public void EmitUnsafeBlock(Action <CodeBlockBuilder> unsafeBlock) { this.writer.WriteLine("unsafe"); using (var unsafeBlockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter())) { unsafeBlock(unsafeBlockBuilder); } }
public void EmitCase(Action <ExpressionBuilder> value, Action <CodeBlockBuilder> caseBlock) { this.writer.Write("case "); value(new ExpressionBuilder(this.writer.GetSubWriter())); this.writer.WriteLine(":"); using (var caseBuilder = new CodeBlockBuilder(this.writer.GetSubWriter(), false)) { caseBlock(caseBuilder); } }
public void EmitIfBlock(Action <ExpressionBuilder> condition, Action <CodeBlockBuilder> ifBlock, Action <CodeBlockBuilder> elseBlock) { this.EmitIfBlock(condition, ifBlock); this.writer.WriteLine("else"); using (var elseBlockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter())) { elseBlock(elseBlockBuilder); } }
public void EmitIfBlock(Action <ExpressionBuilder> condition, Action <CodeBlockBuilder> ifBlock) { this.writer.Write("if ("); condition(this.GetExpressionBuilder()); this.writer.WriteLine(")"); using (var ifBlockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter())) { ifBlock(ifBlockBuilder); } }
public void EmitTry(Action <CodeBlockBuilder> tryBlock, Action <CodeBlockBuilder> finallyBlock) { this.writer.WriteLine("try"); using (var blockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter())) { tryBlock(blockBuilder); } this.writer.WriteLine("finally"); using (var blockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter())) { finallyBlock(blockBuilder); } }
public void EmitMethod(string returnType, string name, Action <CodeBlockBuilder> methodBody, Action <ParameterBuilder> parameters, AccessModifier accessModifier = AccessModifier.Private, MemberModifier methodModifers = MemberModifier.None, IEnumerable <string> summary = null, Action <DocBuilder> docs = null, IEnumerable <string> attributes = null) { this.EmitMemberSpacing(); this.EmitMemberComments(accessModifier, summary, docs); if (attributes != null) { foreach (var attributeName in attributes) { this.writer.WriteLine($"[{attributeName}]"); } } string parameterList = parameters != null ? ParameterBuilder.Apply(parameters) : ""; this.writer.Write($"{accessModifier.Emit()} {RenderMemberModifiers(methodModifers)}{returnType} {name}({parameterList})"); if (methodBody == null) { this.writer.WriteLine(";"); } else { this.writer.WriteLine(); using (var bodyEmitter = new CodeBlockBuilder(this.writer.GetSubWriter())) { methodBody(bodyEmitter); } } }
public void EmitConstructor(Action <CodeBlockBuilder> methodBody, Action <ParameterBuilder> parameters, AccessModifier accessModifier = AccessModifier.Private, MemberModifier methodModifers = MemberModifier.None, IEnumerable <Action <ExpressionBuilder> > baseArguments = null, IEnumerable <string> summary = null, Action <DocBuilder> docs = null, IEnumerable <string> attributes = null) { this.EmitMemberSpacing(); this.EmitMemberComments(accessModifier, summary, docs); if (attributes != null) { foreach (var attributeName in attributes) { this.writer.WriteLine($"[{attributeName}]"); } } string parameterList = parameters != null ? ParameterBuilder.Apply(parameters) : ""; this.writer.WriteLine($"{accessModifier.Emit()} {RenderMemberModifiers(methodModifers)}{this.name}({parameterList})"); if (baseArguments != null) { this.writer.IncreaseIndent(); this.writer.Write(": base("); ExpressionBuilder.EmitArguments(this.writer, baseArguments); this.writer.WriteLine(")"); this.writer.DecreaseIndent(); } using (var bodyEmitter = new CodeBlockBuilder(this.writer.GetSubWriter())) { methodBody(bodyEmitter); } }
public void EmitProperty(string type, string name, AccessModifier accessModifier = AccessModifier.Private, MemberModifier methodModifers = MemberModifier.None, Action <CodeBlockBuilder> getter = null, Action <CodeBlockBuilder> setter = null, IEnumerable <string> summary = null, Action <DocBuilder> docs = null) { this.EmitMemberSpacing(); this.EmitMemberComments(accessModifier, summary, docs); this.writer.WriteLine($"{accessModifier.Emit()} {RenderMemberModifiers(methodModifers)}{type} {name}"); this.writer.WriteLine("{"); this.writer.IncreaseIndent(); if (getter != null) { this.writer.WriteLine("get"); using (var getBuilder = new CodeBlockBuilder(this.writer)) { getter(getBuilder); } } if (setter != null) { this.writer.WriteLine("set"); using (var setBuilder = new CodeBlockBuilder(this.writer)) { setter(setBuilder); } } this.writer.DecreaseIndent(); this.writer.WriteLine("}"); }