Exemplo n.º 1
0
 public void EmitUnsafeBlock(Action <CodeBlockBuilder> unsafeBlock)
 {
     this.writer.WriteLine("unsafe");
     using (var unsafeBlockBuilder = new CodeBlockBuilder(this.writer.GetSubWriter()))
     {
         unsafeBlock(unsafeBlockBuilder);
     }
 }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
 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);
     }
 }
Exemplo n.º 5
0
        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);
                }
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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("}");
        }