Exemple #1
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("System.Threading.Tasks");

            var isPropertyGetterMethod      = clrMethodInfo.Metadata.ContainsKey(Constants.MethodMetadata.IsPropertyGetterMethod);
            var methodNamePrefix            = isPropertyGetterMethod ? "Get" : string.Empty;
            var methodArguments             = string.Join(", ", clrMethodInfo.Parameters.Select(parameter => $"{parameter.ParameterType.CSharpName} {parameter.Name}"));
            var clientMethodInvokeArguments = string.Join("", clrMethodInfo.Parameters.Select(parameter => $", {parameter.Name}"));
            var clientMethodInvoke          = "InvokeVoidAsync";
            var methodReturnType            = "ValueTask";

            if (clrMethodInfo.Return.HasReturnType)
            {
                var returnTypeName = clrMethodInfo.Return.ReturnType?.CSharpName;
                methodReturnType = $"ValueTask<{returnTypeName}>";
                if (isPropertyGetterMethod)
                {
                    clientMethodInvoke = $"GetPropertyAsync<{returnTypeName}>";
                }
                else
                {
                    clientMethodInvoke = $"InvokeAsync<{returnTypeName}>";
                }
            }

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentInheritDocCodeConverter())
            .WriteWithConverter(clrMethodInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrMethodInfo.ObsoleteMessage) : null)
            .WriteLine($"public virtual {methodReturnType} {methodNamePrefix}{clrMethodInfo.PublicName}({methodArguments})")
            .WriteStartBlock()
            .WriteLine($"return {clientMethodInvoke}(\"{clrMethodInfo.Name}\"{clientMethodInvokeArguments});")
            .WriteEndBlock();
        }
Exemple #2
0
        private void WriteCodeFile(CodeFileWriter codeFileWriter, CodeWriterOptions options)
        {
            codeFileWriter.WriteUsingStatements();

            if (string.IsNullOrEmpty(CodeFile.RelativeNamespace))
            {
                codeFileWriter.WriteNamespace($"{options.RootNamespace}");
            }
            else
            {
                codeFileWriter.WriteNamespace($"{options.RootNamespace}.{CodeFile.RelativeNamespace}");
            }

            // start namespace block
            codeFileWriter.WriteStartBlock();
            codeFileWriter.Declaration.WriteLine(CodeFile.Declaration);
            codeFileWriter.WriteDeclarationSection();

            // start declaration block
            codeFileWriter.WriteStartBlock();

            codeFileWriter.WritePropertiesSection(ignoreNewLineInSection: true);
            codeFileWriter.WriteConstructorsSection();
            codeFileWriter.WritePublicPropertiesSection();
            codeFileWriter.WritePublicMethodsSection();
            codeFileWriter.WriteMethodsSection();

            // end declaration block
            codeFileWriter.WriteEndBlock();

            // end namespace block
            codeFileWriter.WriteEndBlock();
        }
Exemple #3
0
 public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
 {
     codeWriter.PublicProperties
     .WriteWithConverter(new CommentSummaryCodeConverter(clrPropertyInfo.Description))
     .WriteWithConverter(clrPropertyInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrPropertyInfo.ObsoleteMessage) : null)
     .WriteLine($"I{clrPropertyInfo.PropertyType.CSharpName} {clrPropertyInfo.PublicName} {{ get; }}");
 }
Exemple #4
0
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement(UsingNamespaces);

            codeWriter.Properties
            .WriteLine($"private I{PropertyType} _{propertyName};");

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentInheritDocCodeConverter())
            .WriteLine($"public I{PropertyType} {propertyName.ToCapitalCase()}")
            // start property body
            .WriteStartBlock()
            .WriteLine($"get")
            // start property get
            .WriteStartBlock()
            .WriteLine($"if (_{propertyName} is null)")
            .WriteStartBlock()
            .WriteLine($"_{propertyName} = new {PropertyType}(webExtensionJSRuntime);")
            .WriteEndBlock()
            .WriteLine($"return _{propertyName};")
            // end property get
            .WriteEndBlock()
            // end property body
            .WriteEndBlock();
        }
Exemple #5
0
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement(UsingNamespaces);
            codeWriter.WriteUsingStatement("System.Text.Json.Serialization");

            codeWriter.Properties
            .WriteLine($"private {PropertyType} _{propertyName};");

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentSummaryCodeConverter(PropertyDefinition.Description))
            .WriteWithConverter(PropertyDefinition.IsDeprecated ? new AttributeObsoleteCodeConverter(PropertyDefinition.Deprecated) : null)
            .WriteWithConverter(new AttributeCodeConverter($"JsonPropertyName(\"{propertyName}\")"))
            .WriteLine($"public {PropertyType} {propertyName.ToCapitalCase()}")
            // start property body
            .WriteStartBlock()
            .WriteLine($"get")
            .WriteStartBlock()
            .WriteLine($"InitializeProperty(\"{propertyName}\", _{propertyName});")
            .WriteLine($"return _{propertyName};")
            .WriteEndBlock()

            .WriteLine($"set")
            .WriteStartBlock()
            .WriteLine($"_{propertyName} = value;")
            .WriteEndBlock()
            // end property body
            .WriteEndBlock();
        }
Exemple #6
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("System.Threading.Tasks");

            var methodArguments             = string.Join(", ", clrMethodInfo.Parameters.Select(parameter => $"{parameter.ParameterType.CSharpName} {parameter.Name}"));
            var clientMethodInvokeArguments = string.Join("", clrMethodInfo.Parameters.Select(parameter => $", {parameter.Name}"));
            var clientMethodInvoke          = "InvokeVoidAsync";
            var methodReturnType            = "ValueTask";

            if (clrMethodInfo.Return.HasReturnType)
            {
                var returnTypeName = clrMethodInfo.Return.ReturnType?.CSharpName;
                methodReturnType   = $"ValueTask<{returnTypeName}>";
                clientMethodInvoke = $"InvokeAsync<{returnTypeName}>";
            }

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentSummaryCodeConverter(clrMethodInfo.Description))
            .WriteWithConverters(clrMethodInfo.Parameters.Select(parameterInfo => new CommentParamCodeSectionConverter(parameterInfo.Name, parameterInfo.Description)))
            .WriteWithConverter(clrMethodInfo.Return.HasReturnType ? new CommentReturnsCodeConverter(clrMethodInfo.Return.Description) : null)
            .WriteWithConverter(clrMethodInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrMethodInfo.ObsoleteMessage) : null)
            .WriteLine($"public virtual {methodReturnType} {clrMethodInfo.PublicName}({methodArguments})")
            .WriteStartBlock()
            .WriteLine($"return {clientMethodInvoke}(\"{clrMethodInfo.Name}\"{clientMethodInvokeArguments});")
            .WriteEndBlock();
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            var propertyType        = clrPropertyInfo.PropertyType.CSharpName;
            var privatePropertyName = clrPropertyInfo.PrivateName;

            codeWriter.Properties
            .WriteLine($"private I{clrPropertyInfo.PropertyType.CSharpName} _{privatePropertyName};");

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentInheritDocCodeConverter())
            .WriteLine($"public I{propertyType} {clrPropertyInfo.PublicName}")
            // start property body
            .WriteStartBlock()
            .WriteLine($"get")
            // start property get
            .WriteStartBlock()
            .WriteLine($"if (_{privatePropertyName} is null)")
            .WriteStartBlock()
            .WriteLine($"_{privatePropertyName} = new {propertyType}(JsRuntime, AccessPath);")
            .WriteEndBlock()
            .WriteLine($"return _{privatePropertyName};")
            // end property get
            .WriteEndBlock()
            // end property body
            .WriteEndBlock();
        }
Exemple #8
0
 public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
 {
     codeWriter.PublicProperties
     .WriteWithConverter(new CommentSummaryCodeConverter(!string.IsNullOrEmpty(clrEnumValueInfo.Description) ? clrEnumValueInfo.Description : clrEnumValueInfo.Name))
     .WriteLine($"[EnumValue(\"{clrEnumValueInfo.Name}\")]")
     .WriteLine($"{clrEnumValueInfo.CSharpName},");
 }
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement(UsingNamespaces);

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentSummaryCodeConverter(PropertyDefinition.Description))
            .WriteWithConverter(PropertyDefinition.IsDeprecated ? new AttributeObsoleteCodeConverter(PropertyDefinition.Deprecated) : null)
            .WriteLine($"{PropertyType} {propertyName} {{ get; }}");
        }
Exemple #10
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            var usingNamespaces = new HashSet <string>();
            var typeNames       = new HashSet <string>();
            var writeParameterlessConstructor = typeChoices.Any(clrTypeInfo => clrTypeInfo.IsNullType);

            codeWriter.WriteUsingStatement(usingNamespaces);

            if (writeParameterlessConstructor)
            {
                codeWriter.Constructors
                .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
                .WriteLine($"public {className}() : base(null, null)")
                .WriteStartBlock()
                .WriteEndBlock();
            }

            foreach (var clrTypeInfo in typeChoices)
            {
                if (typeNames.Contains(clrTypeInfo.CSharpName) || clrTypeInfo.IsNullType)
                {
                    continue;
                }
                typeNames.Add(clrTypeInfo.CSharpName);

                string?privateField = null;
                // object and interface implicit conversion is not allowed in C#
                if (clrTypeInfo.FullName != typeof(object).FullName && !clrTypeInfo.IsInterface)
                {
                    privateField = $"value{SanitizeVariableName(clrTypeInfo.CSharpName).ToCapitalCase()}";
                }

                codeWriter.Constructors
                .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
                .WriteWithConverter(new CommentParamCodeSectionConverter("value", "The value."))
                .WriteLine($"public {className}({clrTypeInfo.CSharpName} value) : base(value, typeof({clrTypeInfo.CSharpName}))")
                .WriteStartBlock()
                .WriteLine(privateField is null ? null : $"{privateField} = value;")
                .WriteEndBlock();

                if (privateField is not null)
                {
                    codeWriter.Properties
                    .WriteLine($"private readonly {clrTypeInfo.CSharpName} {privateField};");

                    codeWriter.PublicMethods
                    .WriteWithConverter(new CommentSummaryCodeConverter($"Converts from <see cref=\"{className}\" /> to <see cref=\"{clrTypeInfo.CSharpName}\" />."))
                    .WriteWithConverter(new CommentParamCodeSectionConverter("value", "The value to convert from."))
                    .WriteLine($"public static implicit operator {clrTypeInfo.CSharpName}({className} value) => value.{privateField};");

                    codeWriter.PublicMethods
                    .WriteWithConverter(new CommentSummaryCodeConverter($"Converts from <see cref=\"{clrTypeInfo.CSharpName}\" /> to <see cref=\"{className}\" />."))
                    .WriteWithConverter(new CommentParamCodeSectionConverter("value", "The value to convert from."))
                    .WriteLine($"public static implicit operator {className}({clrTypeInfo.CSharpName} value) => new(value);");
                }
            }
        }
Exemple #11
0
 public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
 {
     codeWriter.Constructors
     .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
     .WriteWithConverter(new CommentParamCodeSectionConverter("webExtensionJSRuntime", "Web Extension JS Runtime"))
     .WriteLine($"public {className}(WebExtensionJSRuntime webExtensionJSRuntime) : base(webExtensionJSRuntime, \"{apiName}\")")
     .WriteStartBlock()
     .WriteEndBlock();
 }
 public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
 {
     codeWriter.PublicMethods
     .WriteWithConverter(new CommentInheritDocCodeConverter())
     .WriteLine($"public override string ToString()")
     .WriteStartBlock()
     .WriteLine("return currentValue?.ToString();")
     .WriteEndBlock();
 }
Exemple #13
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("System.Text.Json.Serialization");

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentSummaryCodeConverter(clrPropertyInfo.Description))
            .WriteWithConverter(clrPropertyInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrPropertyInfo.ObsoleteMessage) : null)
            .WriteWithConverter(new AttributeCodeConverter($"JsonPropertyName(\"{clrPropertyInfo.Name}\")"))
            .WriteWithConverter(clrPropertyInfo.PropertyType.IsNullable ? new AttributeCodeConverter($"JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)") : null)
            .WriteLine($"public {clrPropertyInfo.PropertyType.CSharpName} {clrPropertyInfo.PublicName} {{ get; set; }}");
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("JsBind.Net");

            codeWriter.Constructors
            .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{apiRootName}\" />."))
            .WriteWithConverter(new CommentParamCodeSectionConverter("jsRuntime", "The JS runtime adapter."))
            .WriteLine($"public {apiRootName}(IJsRuntimeAdapter jsRuntime) : base(jsRuntime, \"browser\")")
            .WriteStartBlock()
            .WriteEndBlock();
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.Properties
            .WriteLine($"private const string pattern = \"{stringFormat}\";");

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
            .WriteLine($"public {className}(string value) : base(value, pattern)")
            .WriteStartBlock()
            .WriteEndBlock();
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("JsBind.Net");

            codeWriter.Constructors
            .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
            .WriteWithConverter(new CommentParamCodeSectionConverter("jsRuntime", "The JS runtime adapter."))
            .WriteWithConverter(new CommentParamCodeSectionConverter("accessPath", "The base API access path."))
            .WriteLine($"public {className}(IJsRuntimeAdapter jsRuntime, string accessPath) : base(jsRuntime, AccessPaths.Combine(accessPath, \"{apiName}\"))")
            .WriteStartBlock()
            .WriteEndBlock();
        }
Exemple #17
0
        private void WriteUsingStatements(CodeWriter codeWriter, CodeWriterOptions options)
        {
            foreach (var usingNamespace in CodeFile.UsingNamespaces)
            {
                codeWriter.WriteUsingStatement(usingNamespace);
            }

            foreach (var usingNamespace in CodeFile.UsingRelativeNamespaces)
            {
                codeWriter.WriteUsingStatement($"{options.RootNamespace}.{usingNamespace}");
            }
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.Properties
            .WriteLine($"private readonly WebExtensionJSRuntime webExtensionJSRuntime;");

            codeWriter.Constructors
            .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{apiRootName}\" />."))
            .WriteLine($"public {apiRootName}(WebExtensionJSRuntime webExtensionJSRuntime)")
            .WriteStartBlock()
            .WriteLine($"this.webExtensionJSRuntime = webExtensionJSRuntime;")
            .WriteEndBlock();
        }
Exemple #19
0
 public void WriteTo(CodeSectionWriter codeWriter, CodeWriterOptions options)
 {
     codeWriter.WriteUsingStatement("System");
     if (string.IsNullOrEmpty(obsoleteMessage) || "True".Equals(obsoleteMessage))
     {
         codeWriter.WriteLine($"[Obsolete(\"This has been marked as deprecated without a description message. Please refer to the summary comment or the official API documentation.\")]");
     }
     else
     {
         codeWriter.WriteLine($"[Obsolete(\"{obsoleteMessage}\")]");
     }
 }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.PublicMethods
            .WriteWithConverter(new CommentSummaryCodeConverter($"Converts from <see cref=\"{className}\" /> to <see cref=\"string\" />."))
            .WriteWithConverter(new CommentParamCodeSectionConverter("value", "The value to convert from."))
            .WriteLine($"public static implicit operator string({className} value) => value.Value;");

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentSummaryCodeConverter($"Converts from <see cref=\"string\" /> to <see cref=\"{className}\" />."))
            .WriteWithConverter(new CommentParamCodeSectionConverter("value", "The value to convert from."))
            .WriteLine($"public static implicit operator {className}(string value) => new(value);");
        }
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            if (!PropertyDefinition.IsConstant)
            {
                return;
            }

            codeWriter.WriteUsingStatement(UsingNamespaces);

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentInheritDocCodeConverter())
            .WriteLine($"public {PropertyType} {propertyName.ToCapitalCase()} => {PropertyDefinition.ConstantValue};");
        }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            if (enumValueDefinition.Name is null)
            {
                return;
            }

            var sanitizedValueName = SanitizeValueName(enumValueDefinition.Name.ToCapitalCase());

            codeWriter.PublicProperties
            .WriteWithConverter(new CommentSummaryCodeConverter(enumValueDefinition.Description ?? enumValueDefinition.Name))
            .WriteLine($"[EnumValue(\"{enumValueDefinition.Name}\")]")
            .WriteLine($"{sanitizedValueName},");
        }
Exemple #23
0
 public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
 {
     if (clrPropertyInfo.PropertyType.Metadata.TryGetValue(Constants.TypeMetadata.ClassType, out var classType) && (ClassType)classType == ClassType.ApiClass)
     {
         new ApiClassInterfaceApiPropertyCodeConverter(clrPropertyInfo)
         .WriteTo(codeWriter, options);
     }
     else
     {
         codeWriter.PublicProperties
         .WriteWithConverter(new CommentSummaryCodeConverter(clrPropertyInfo.Description))
         .WriteWithConverter(clrPropertyInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrPropertyInfo.ObsoleteMessage) : null)
         .WriteLine($"{clrPropertyInfo.PropertyType.CSharpName} {clrPropertyInfo.PublicName} {{ get; }}");
     }
 }
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("System");

            var propertyTypes = clrPropertyInfos.Select(property => $"typeof({property.PropertyType.CSharpName})");
            var propertyNames = clrPropertyInfos.Select(property => $"\"{property.PublicName}\"");

            codeWriter.Properties
            .WriteLine($"private static readonly Type[] propertyTypes = new[] {{ {string.Join(", ", propertyTypes)} }};")
            .WriteLine($"private static readonly string[] propertyNames = new[] {{ {string.Join(", ", propertyNames)} }};");

            codeWriter.Constructors
            .WriteWithConverter(new CommentSummaryCodeConverter($"Creates a new instance of <see cref=\"{className}\" />."))
            .WriteLine($"public {className}() : base(propertyTypes, propertyNames)")
            .WriteStartBlock()
            .WriteEndBlock();
        }
Exemple #25
0
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            if (functionDefinition.Name is null)
            {
                return;
            }

            codeWriter.WriteUsingStatement(UsingNamespaces);

            var methodNamePrefix = functionDefinition.Type == ObjectType.PropertyGetterFunction ? "Get" : string.Empty;

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentSummaryCodeConverter(functionDefinition.Description))
            .WriteWithConverters(ParameterDefinitions.Select(parameterDefinition => new CommentParamCodeSectionConverter(parameterDefinition.Name, parameterDefinition.Description)))
            .WriteWithConverter(ReturnDefinition is not null ? new CommentReturnsCodeConverter(ReturnDefinition.Description) : null)
            .WriteWithConverter(functionDefinition.IsDeprecated ? new AttributeObsoleteCodeConverter(functionDefinition.Deprecated) : null)
            .WriteLine($"{MethodReturnType} {methodNamePrefix}{functionDefinition.Name.ToCapitalCase()}({MethodArguments});");
        }
Exemple #26
0
        /// <summary>
        /// Generates the code using the appropriate code provider and writes it to the
        /// desired location.
        /// </summary>
        public static CodeWriterOutput Write(CodeNamespace codeNamespace, CodeWriterOptions options)
        {
            if (options.AscendingClassByName)
            {
                SortAsc(codeNamespace.Types);
            }

            // Create a new instance of CodeWriter class with given options.
            CodeWriter writer = new CodeWriter(codeNamespace, options);

            // Execute the code writing procedure.
            writer.WriteCodeFiles();
            // Crate an instance of CodeWriterOutput class with the code writer's output.
            CodeWriterOutput output = new CodeWriterOutput(writer.generatedCodeFileNames);

            // Finally return the CodeWriterOutput.
            return(output);
        }
Exemple #27
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            if (clrPropertyInfo.PropertyType.Metadata.TryGetValue(Constants.TypeMetadata.ClassType, out var classType) && (ClassType)classType == ClassType.ApiClass)
            {
                new ApiClassApiPropertyCodeConverter(clrPropertyInfo)
                .WriteTo(codeWriter, options);
            }
            else if (clrPropertyInfo.IsConstant)
            {
                codeWriter.PublicProperties
                .WriteWithConverter(new CommentInheritDocCodeConverter())
                .WriteLine($"public {clrPropertyInfo.PropertyType.CSharpName} {clrPropertyInfo.PublicName} => {clrPropertyInfo.ConstantValue};");
            }
            else
            {
                // Event property
                var privatePropertyName = clrPropertyInfo.PrivateName;

                codeWriter.WriteUsingStatement("JsBind.Net");

                codeWriter.Properties
                .WriteLine($"private {clrPropertyInfo.PropertyType.CSharpName} _{privatePropertyName};");

                codeWriter.PublicProperties
                .WriteWithConverter(new CommentInheritDocCodeConverter())
                .WriteWithConverter(clrPropertyInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrPropertyInfo.ObsoleteMessage) : null)
                .WriteLine($"public {clrPropertyInfo.PropertyType.CSharpName} {clrPropertyInfo.PublicName}")
                // start property body
                .WriteStartBlock()
                .WriteLine($"get")
                // start property get
                .WriteStartBlock()
                .WriteLine($"if (_{privatePropertyName} is null)")
                .WriteStartBlock()
                .WriteLine($"_{privatePropertyName} = new {clrPropertyInfo.PropertyType.CSharpName}();")
                .WriteLine($"_{privatePropertyName}.Initialize(JsRuntime, AccessPaths.Combine(AccessPath, \"{privatePropertyName}\"));")
                .WriteEndBlock()
                .WriteLine($"return _{privatePropertyName};")
                // end property get
                .WriteEndBlock()
                // end property body
                .WriteEndBlock();
            }
        }
Exemple #28
0
        public override void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            if (functionDefinition.Name is null)
            {
                return;
            }

            codeWriter.WriteUsingStatement(UsingNamespaces);

            var methodNamePrefix = functionDefinition.Type == ObjectType.PropertyGetterFunction ? "Get" : string.Empty;

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentInheritDocCodeConverter())
            .WriteWithConverter(functionDefinition.IsDeprecated ? new AttributeObsoleteCodeConverter(functionDefinition.Deprecated) : null)
            .WriteLine($"public virtual {MethodReturnType} {methodNamePrefix}{functionDefinition.Name.ToCapitalCase()}({MethodArguments})")
            .WriteStartBlock()
            .WriteLine($"return {ClientMethodInvoke}(\"{functionDefinition.Name}\"{ClientMethodInvokeArguments});")
            .WriteEndBlock();
        }
Exemple #29
0
        public void WriteTo(CodeWriter codeWriter, CodeWriterOptions options)
        {
            codeWriter.WriteUsingStatement("System.Threading.Tasks");

            var isPropertyGetterMethod = clrMethodInfo.Metadata.ContainsKey(Constants.MethodMetadata.IsPropertyGetterMethod);
            var methodNamePrefix       = isPropertyGetterMethod ? "Get" : string.Empty;
            var methodArguments        = string.Join(", ", clrMethodInfo.Parameters.Select(parameter => $"{parameter.ParameterType.CSharpName} {parameter.Name}"));
            var methodReturnType       = "ValueTask";

            if (clrMethodInfo.Return.HasReturnType)
            {
                methodReturnType = $"ValueTask<{clrMethodInfo.Return.ReturnType?.CSharpName}>";
            }

            codeWriter.PublicMethods
            .WriteWithConverter(new CommentSummaryCodeConverter(clrMethodInfo.Description))
            .WriteWithConverters(clrMethodInfo.Parameters.Select(parameterInfo => new CommentParamCodeSectionConverter(parameterInfo.Name, parameterInfo.Description)))
            .WriteWithConverter(clrMethodInfo.Return.HasReturnType ? new CommentReturnsCodeConverter(clrMethodInfo.Return.Description) : null)
            .WriteWithConverter(clrMethodInfo.IsObsolete ? new AttributeObsoleteCodeConverter(clrMethodInfo.ObsoleteMessage) : null)
            .WriteLine($"{methodReturnType} {methodNamePrefix}{clrMethodInfo.PublicName}({methodArguments});");
        }
        /// <summary>
        /// Executes the code generation workflow.
        /// </summary>
        public CodeWriterOutput GenerateCode(Options.CodeGenOptions options)
        {
            ICodeGeneratorContext codeGeneratorContext = buildCodeGeneratorContext(options);
            ICodeGenerator        codeGenerator        = this.buildCodeGenerator(options);

            CodeWriterOptions writeOptions = CodeGenOptionsParser.GetCodeWriterOptions(options);

            if (options.OnlyUseDataContractSerializer)
            {
                CodeCompileUnit targetCodeCompileUnit = codeGenerator.GenerateDataContractCode(codeGeneratorContext);
                return(CodeWriter.CodeWriter.Write(targetCodeCompileUnit, writeOptions));
            }
            else if (options.GenerateSeparateFilesEachXsd)
            {
                CodeNamespace[] targetCodeNamespaces = codeGenerator.GenerateCodes(codeGeneratorContext);
                return(CodeWriter.CodeWriter.Write(targetCodeNamespaces, writeOptions));
            }
            else
            {
                CodeNamespace targetCodeNamespace = codeGenerator.GenerateCode(codeGeneratorContext);
                return(CodeWriter.CodeWriter.Write(targetCodeNamespace, writeOptions));
            }
        }