private void BuildParameterDeclaration(IdlFunctionParameter parameter, StringBuilder parametersBuilder) { var type = this.BuildParameterType(parameter.Type); var name = this.BuildParameterName(parameter.Name); if (parameter.Attribute.IsInAndOut()) { parametersBuilder.Append("ref "); } else if (parameter.Attribute.IsIn()) { parametersBuilder.Append("in "); } else if (parameter.Attribute.IsOut()) { parametersBuilder.Append("out "); } parametersBuilder.Append($"{type} {name}"); }
private void BuildBodyInstructions(IdlFunctionParameter parameter, StringBuilder bodyBuilder, int indent) { var name = this.BuildParameterName(parameter.Name); var type = this.BuildParameterType(parameter.Type); if (parameter.Attribute.IsOut()) { switch (type) { case "string": bodyBuilder.AppendLine($"{name} = string.Empty;".Indent(indent)); break; default: bodyBuilder.AppendLine($"{name} = default;".Indent(indent)); break; } } }
public void Build(IdlFunctionParameter parameter, IdlFunction function, BuilderTargetCollection functionTargets, int indent) { if (functionTargets.TryGetValue(BuilderTarget.Parameters, out var parameterTarget)) { this.BuildParameterDeclaration(parameter, parameterTarget); } if (functionTargets.TryGetValue(BuilderTarget.FunctionBody, out var bodyTarget)) { this.BuildBodyInstructions(parameter, bodyTarget, indent); } if (functionTargets.TryGetValue(BuilderTarget.EventProperties, out var propertyTarget)) { this.BuildEventProperties(parameter, propertyTarget, indent); } if (functionTargets.TryGetValue(BuilderTarget.EventBody, out var eventBodyTarget)) { this.BuildPropertyAssignment(parameter, eventBodyTarget, indent + 1); } }
private void BuildPropertyAssignment(IdlFunctionParameter parameter, StringBuilder propertyBuilder, int indent) { propertyBuilder.AppendLine($"this.{this.BuildPropertyName(parameter.Name)} = {this.BuildParameterName(parameter.Name)};".Indent(indent)); }
private void BuildEventProperties(IdlFunctionParameter parameter, StringBuilder propertyBuilder, int indent) { propertyBuilder.AppendLine($"public {this.BuildParameterType(parameter.Type)} {this.BuildPropertyName(parameter.Name)} {{ get; }}".Indent(indent)); }