diff --git a/Generators/KitX.Sdk.Generators.CSharp/KitX.Sdk.Generators.CSharp.csproj b/Generators/KitX.Sdk.Generators.CSharp/KitX.Sdk.Generators.CSharp.csproj new file mode 100644 index 0000000..1f0dcf8 --- /dev/null +++ b/Generators/KitX.Sdk.Generators.CSharp/KitX.Sdk.Generators.CSharp.csproj @@ -0,0 +1,33 @@ + + + + netstandard2.0 + preview + true + + + + + + + + + + + + + + + + + $(GetTargetPathDependsOn);GetDependencyTargetPaths + + + + + + + + + + diff --git a/Generators/KitX.Sdk.Generators.CSharp/PluginFunctionsGenerator.cs b/Generators/KitX.Sdk.Generators.CSharp/PluginFunctionsGenerator.cs new file mode 100644 index 0000000..55bb934 --- /dev/null +++ b/Generators/KitX.Sdk.Generators.CSharp/PluginFunctionsGenerator.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using KitX.Contract.CSharp.Attributes; +using KitX.Shared.CSharp.Plugin; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Text; +using Newtonsoft.Json; + +namespace KitX.Sdk.Generators.CSharp; + +[Generator] +public class PluginFunctionsGenerator : ISourceGenerator +{ + public void Initialize(GeneratorInitializationContext context) + { + + } + + //public Dictionary GetTranslations(string field, IEnumerable translations) + //{ + // var result = new Dictionary(); + + // foreach (var item in translations.Where(t => t.Field.Equals(field))) + // result.Add(item.Language, item.Value); + + // return result; + //} + + public void Execute(GeneratorExecutionContext context) + { + var entryAttrType = typeof(EntryClassAttribute); + var funcAttrType = typeof(FunctionAttribute); + + //var functions = context.Compilation.Assembly.GetAttributes() + // .Where(x => x.AttributeClass?.GetType().Equals(entryAttrType) ?? false) + // .SelectMany(x => x.GetType().GetMethods()) + // .Where(f => f.CustomAttributes.Any( + // x => x.AttributeType.Equals(funcAttrType) + // )) + // ; + + //var result = functions.Select(func => + //{ + // var parameters = func.GetParameters().Select(param => + // { + // var paramAttr = param.GetCustomAttribute()!; + + // return new Parameter + // { + // Name = paramAttr.Name, + // DisplayNames = GetTranslations("DisplayName", param.GetCustomAttributes()), + // Type = param.ParameterType.Name, + // IsOptional = param.IsOptional, + // }; + // }); + + // var funcAttr = func.GetCustomAttribute()!; + + // return new Function + // { + // Name = funcAttr.Name, + // DisplayNames = GetTranslations("DisplayName", func.GetCustomAttributes()), + // ReturnValueType = func.ReturnType.Name, + // Parameters = parameters.ToList(), + // }; + //}); + + //var sourceText = JsonConvert.SerializeObject(result); + + //context.AddSource("PluginFunctions.json", SourceText.From(sourceText, Encoding.UTF8)); + + context.AddSource("Test.json", SourceText.From("", Encoding.UTF8)); + + context.ReportDiagnostic( + Diagnostic.Create( + new DiagnosticDescriptor( + "KSDK0001", + "Plugin Info Generated", + "PluginFunctions.json generated successfully.", + "Plugin", + DiagnosticSeverity.Info, + true + ), + Location.None) + ); + + context.ReportDiagnostic( + Diagnostic.Create( + new DiagnosticDescriptor( + "KSDK0000", + "Your location", + $"You are at {Path.GetFullPath(".")}", + "Plugin", + DiagnosticSeverity.Warning, + true + ), + Location.None) + ); + } +} diff --git a/KitX Plugins b/KitX Plugins index 2c2a210..2fd3d44 160000 --- a/KitX Plugins +++ b/KitX Plugins @@ -1 +1 @@ -Subproject commit 2c2a2102d4826765f6f9806ff1e1ddf3bc3f1b3e +Subproject commit 2fd3d442b9b2d18f8571aec4d3de64000091c341