Files
csharp/src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs
stan-sz 624ee292f7 Enable some of the unnecessary code rules (#799)
* CA1823 Avoid unused private fields
* CA1847 Use string.Contains(char) instead of string.Contains(string) with single characters
* IDE0005 Remove unnecessary import
* IDE0051 Private member is unused
* IDE0052 Private member is unread
2022-03-21 19:17:45 -07:00

121 lines
3.8 KiB
C#

using Autofac;
using Microsoft.CodeAnalysis;
using NSwag;
using Nustache.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace LibKubernetesGenerator
{
[Generator]
public class KubernetesClientSourceGenerator : ISourceGenerator
{
private static object execlock = new object();
public void ExecuteInner(GeneratorExecutionContext context)
{
lock (execlock)
{
var swaggerfile = context.AdditionalFiles.First(f => f.Path.EndsWith("swagger.json"));
var swagger = OpenApiDocument.FromJsonAsync(swaggerfile.GetText().ToString()).GetAwaiter().GetResult();
var builder = new ContainerBuilder();
builder.RegisterType<ClassNameHelper>()
.WithParameter(new NamedParameter(nameof(swagger), swagger))
.AsSelf()
.AsImplementedInterfaces()
;
builder.RegisterType<StringHelpers>()
.AsImplementedInterfaces()
;
builder.RegisterType<MetaHelper>()
.AsImplementedInterfaces()
;
builder.RegisterType<PluralHelper>()
.WithParameter(new TypedParameter(typeof(OpenApiDocument), swagger))
.AsImplementedInterfaces()
;
builder.RegisterType<GeneralNameHelper>()
.AsSelf()
.AsImplementedInterfaces()
;
builder.RegisterType<TypeHelper>()
.AsSelf()
.AsImplementedInterfaces()
;
builder.RegisterType<ParamHelper>()
.AsImplementedInterfaces()
;
builder.RegisterType<UtilHelper>()
.AsImplementedInterfaces()
;
builder.RegisterType<ModelExtGenerator>();
builder.RegisterType<ModelGenerator>();
builder.RegisterType<ApiGenerator>();
builder.RegisterType<VersionConverterGenerator>();
var container = builder.Build();
// TODO move to Handlebars.Net
{
var ch = typeof(Helpers).GetField("CustomHelpers", BindingFlags.Static | BindingFlags.NonPublic);
((Dictionary<string, Helper>)ch.GetValue(null)).Clear();
}
foreach (var helper in container.Resolve<IEnumerable<INustacheHelper>>())
{
helper.RegisterHelper();
}
container.Resolve<ApiGenerator>().Generate(swagger, context);
container.Resolve<ModelGenerator>().Generate(swagger, context);
container.Resolve<ModelExtGenerator>().Generate(swagger, context);
container.Resolve<VersionConverterGenerator>().Generate(swagger, context);
}
}
public void Execute(GeneratorExecutionContext context)
{
try
{
ExecuteInner(context);
}
catch (Exception e)
{
context.ReportDiagnostic(Diagnostic.Create(
new DiagnosticDescriptor(
"K8SCSG01",
e.Message,
e.StackTrace,
"Kubernetes C# code generator",
DiagnosticSeverity.Error,
true), Location.None));
}
}
public void Initialize(GeneratorInitializationContext context)
{
#if DEBUG
// if (!Debugger.IsAttached)
// {
// Debugger.Launch();
// }
#endif
}
}
}