public void Build(BuilderTargetCollection builderTargets, IdlNamespace idlNamespace, int indent) { var namespaceBuilderTargets = new BuilderTargetCollection { BuilderTarget.InterfaceSignatures, BuilderTarget.Delegates, BuilderTarget.Functions, BuilderTarget.Events, BuilderTarget.Types, BuilderTarget.Constants }; namespaceBuilderTargets.Parent = builderTargets; foreach (var(strategy, element) in idlNamespace.Elements) { strategy.Build(element, idlNamespace.ConstantPrefixes, namespaceBuilderTargets, indent + 2); } this.BuildNamespaceConstants(namespaceBuilderTargets, idlNamespace, indent + 1); this.BuildNamespaceEventsClass(namespaceBuilderTargets, idlNamespace, indent + 1); this.BuildNamespaceNativesInterface(namespaceBuilderTargets, idlNamespace, indent + 1); this.BuildNamespaceNativesClass(namespaceBuilderTargets, idlNamespace, indent + 1); var namespaceTarget = builderTargets[BuilderTarget.Namespaces]; namespaceTarget.AppendLine($"namespace Micky5991.Samp.Net.Core.Natives.{idlNamespace.Name.ConvertToPascalCase()}".Indent(indent)); namespaceTarget.AppendLine("{".Indent(indent)); namespaceTarget.AppendLine(namespaceBuilderTargets[BuilderTarget.Types].ToString()); namespaceTarget.AppendLine("}".Indent(indent)); }
private void BuildNamespaceNativesClass(BuilderTargetCollection buildTargets, IdlNamespace idlNamespace, int indent) { var stringBuilder = buildTargets[BuilderTarget.Types]; stringBuilder.AppendLine($"public class {idlNamespace.Name.ConvertToPascalCase()}Natives : I{idlNamespace.Name.ConvertToPascalCase()}Natives".Indent(indent)); stringBuilder.AppendLine("{".Indent(indent)); // Field stringBuilder.AppendLine("private NativeTypeConverter typeConverter;".Indent(indent + 1)); stringBuilder.AppendLine(); stringBuilder.AppendLine("private ISampThreadEnforcer sampThreadEnforcer;".Indent(indent + 1)); stringBuilder.AppendLine(); stringBuilder.Append(buildTargets[BuilderTarget.Delegates].ToString()); // Constructor stringBuilder.AppendLine($@"public {idlNamespace.Name.ConvertToPascalCase()}Natives(NativeTypeConverter typeConverter, ISampThreadEnforcer sampThreadEnforcer)".Indent(indent + 1)); stringBuilder.AppendLine("{".Indent(indent + 1)); stringBuilder.AppendLine("this.typeConverter = typeConverter;".Indent(indent + 2)); stringBuilder.AppendLine("this.sampThreadEnforcer = sampThreadEnforcer;".Indent(indent + 2)); stringBuilder.AppendLine("}".Indent(indent + 1)); stringBuilder.AppendLine(); // Body stringBuilder.Append(buildTargets[BuilderTarget.Functions].ToString()); stringBuilder.AppendLine("}".Indent(indent)); stringBuilder.AppendLine(); }
private void BuildNamespaceConstants(BuilderTargetCollection buildTargets, IdlNamespace idlNamespace, int indent) { var stringBuilder = buildTargets[BuilderTarget.Types]; stringBuilder.AppendLine($"public static class {idlNamespace.Name.ConvertToPascalCase()}Constants".Indent(indent)); stringBuilder.AppendLine("{".Indent(indent)); stringBuilder.AppendLine(buildTargets[BuilderTarget.Constants].ToString()); stringBuilder.AppendLine("}".Indent(indent)); }
private void BuildNamespaceNativesInterface(BuilderTargetCollection buildTargets, IdlNamespace idlNamespace, int indent) { var stringBuilder = buildTargets[BuilderTarget.Types]; stringBuilder.AppendLine($"public interface I{idlNamespace.Name.ConvertToPascalCase()}Natives : INatives".Indent(indent)); stringBuilder.AppendLine("{".Indent(indent)); stringBuilder.Append(buildTargets[BuilderTarget.InterfaceSignatures].ToString()); stringBuilder.AppendLine("}".Indent(indent)); stringBuilder.AppendLine(); }
public virtual void BuildFunction(IdlFunction function, BuilderTargetCollection builderTargets, int indent) { var functionTargets = new BuilderTargetCollection { BuilderTarget.Parameters, BuilderTarget.FunctionBody, }; functionTargets.Parent = builderTargets; for (var i = 0; i < function.Parameters.Count; i++) { var parameter = function.Parameters[i]; this.parameterBuildStrategy.Build(parameter, function, functionTargets, indent + 1); if (i < function.Parameters.Count - 1) { functionTargets[BuilderTarget.Parameters].Append(", "); } } this.BuildFunctionBody(function, functionTargets[BuilderTarget.FunctionBody], indent + 1); if (functionTargets[BuilderTarget.FunctionBody].Length == 0) { functionTargets[BuilderTarget.FunctionBody].Append("throw new System.NotImplementedException();".Indent(indent)); } var signature = $"{this.MapReturnType(function.ReturnType)} {function.Name}({functionTargets[BuilderTarget.Parameters]})"; builderTargets[BuilderTarget.InterfaceSignatures].AppendLine($"{signature};".Indent(indent + 1)); builderTargets[BuilderTarget.Functions].AppendLine($"public virtual {signature}".Indent(indent)); builderTargets[BuilderTarget.Functions].AppendLine("{".Indent(indent)); builderTargets[BuilderTarget.Functions].AppendLine(functionTargets[BuilderTarget.FunctionBody].ToString()); builderTargets[BuilderTarget.Functions].AppendLine("}".Indent(indent)); builderTargets[BuilderTarget.Functions].AppendLine(); }
private void BuildNamespaceEventsClass(BuilderTargetCollection buildTargets, IdlNamespace idlNamespace, int indent) { var stringBuilder = buildTargets[BuilderTarget.Types]; stringBuilder.AppendLine($"public class {idlNamespace.Name.ConvertToPascalCase()}EventCollectionFactory : Micky5991.Samp.Net.Core.Interfaces.Events.INativeEventCollectionFactory".Indent(indent)); stringBuilder.AppendLine("{".Indent(indent)); // Constructor stringBuilder.AppendLine($@"public Micky5991.Samp.Net.Core.Interfaces.Events.INativeEventCollection Build()".Indent(indent + 1)); stringBuilder.AppendLine("{".Indent(indent + 1)); stringBuilder.AppendLine("return new Micky5991.Samp.Net.Core.Interop.Events.NativeEventCollection {".Indent(indent + 2)); stringBuilder.Append(buildTargets[BuilderTarget.Events].ToString()); stringBuilder.AppendLine("};".Indent(indent + 2)); stringBuilder.AppendLine("}".Indent(indent + 1)); stringBuilder.AppendLine("}".Indent(indent)); stringBuilder.AppendLine(); }
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); } }
public virtual void Build(IdlNamespaceElement element, IList <string> constantPrefixes, BuilderTargetCollection builderTargets, int indent) { this.BuildFunction((IdlFunction)element, builderTargets, indent); }
public override void BuildFunction(IdlFunction function, BuilderTargetCollection builderTargets, int indent) { this.BuildEventRegistration(function, builderTargets, indent + 2); this.BuildEventClass(function, builderTargets, indent - 1); }