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 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 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(); }
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 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(); }