Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }