|
|
|
@@ -29,8 +29,8 @@ namespace mROA.Codegen
|
|
|
|
|
// var reader = new StreamReader(test);
|
|
|
|
|
// var allText = reader.ReadToEnd();
|
|
|
|
|
var frontendContextRepo = new List<string>();
|
|
|
|
|
List<IMethodSymbol> totalMethods = new List<IMethodSymbol>();
|
|
|
|
|
|
|
|
|
|
List<IMethodSymbol> innerMethods = new List<IMethodSymbol>();
|
|
|
|
|
List<string> invokers = new List<string>();
|
|
|
|
|
var declarations = classes.ToList().OrderBy(i => i.Identifier.Text).ToList();
|
|
|
|
|
foreach (var classDeclarationSyntax in declarations)
|
|
|
|
@@ -39,10 +39,11 @@ namespace mROA.Codegen
|
|
|
|
|
|
|
|
|
|
if (semanticModel.GetDeclaredSymbol(classDeclarationSyntax) is not INamedTypeSymbol classSymbol)
|
|
|
|
|
continue;
|
|
|
|
|
List<IMethodSymbol> innerMethods = new List<IMethodSymbol>();
|
|
|
|
|
|
|
|
|
|
var namespaceName = classSymbol.ContainingNamespace.ToDisplayString();
|
|
|
|
|
var className = classDeclarationSyntax.Identifier.Text;
|
|
|
|
|
innerMethods.AddRange(CollectMembers(classSymbol));
|
|
|
|
|
innerMethods = CollectMembers(classSymbol);
|
|
|
|
|
var associated = innerMethods.Select(i => i.AssociatedSymbol).Where(i => i != null)
|
|
|
|
|
.Distinct(SymbolEqualityComparer.Default).Cast<ISymbol>().ToList();
|
|
|
|
|
|
|
|
|
@@ -50,6 +51,8 @@ namespace mROA.Codegen
|
|
|
|
|
i.MethodKind != MethodKind.EventAdd && i.MethodKind != MethodKind.EventRemove)
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
totalMethods.AddRange(innerMethods);
|
|
|
|
|
|
|
|
|
|
var originalName = className;
|
|
|
|
|
|
|
|
|
|
className = className.TrimStart('I') + "RemoteEndpoint";
|
|
|
|
@@ -63,10 +66,10 @@ namespace mROA.Codegen
|
|
|
|
|
switch (method.MethodKind)
|
|
|
|
|
{
|
|
|
|
|
case MethodKind.PropertyGet or MethodKind.PropertySet:
|
|
|
|
|
GeneratePropertyMethod(method, innerMethods, propertiesAccessMethods, invokers);
|
|
|
|
|
GeneratePropertyMethod(method, totalMethods, propertiesAccessMethods, invokers);
|
|
|
|
|
continue;
|
|
|
|
|
default:
|
|
|
|
|
GenerateDeclaredMethod(method, declaredMethods, innerMethods, invokers);
|
|
|
|
|
GenerateDeclaredMethod(method, declaredMethods, totalMethods, invokers);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -132,11 +135,10 @@ namespace {namespaceName}
|
|
|
|
|
$"{{ typeof({classSymbol.ToDisplayString()}), typeof({namespaceName}.{className}) }}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (innerMethods.Count != 0)
|
|
|
|
|
if (totalMethods.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
var methodsStringed = invokers;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var coCodegenRepoCode = @$"// <auto-generated/>
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Reflection;
|
|
|
|
@@ -174,7 +176,7 @@ namespace mROA.Codegen
|
|
|
|
|
context.AddSource("CoCodegenMethodRepository.g.cs", SourceText.From(coCodegenRepoCode, Encoding.UTF8));
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (frontendContextRepo.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
var fronendRepoCode = @$"// <auto-generated/>
|
|
|
|
@@ -325,6 +327,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level} IsVoid = {isVoid.ToString().ToLower()},
|
|
|
|
|
{(isVoid ? String.Empty : (level + "\t" + "ReturnType = typeof(" + ExtractTaskType(method.ReturnType)) + "),")}
|
|
|
|
|
{level} ParameterTypes = new Type[] {{ {parameterTypes} }},
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, parameters, special, post) => {funcInvoking},
|
|
|
|
|
{level}}}";
|
|
|
|
|
else
|
|
|
|
@@ -333,6 +336,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level} IsVoid = {isVoid.ToString().ToLower()},
|
|
|
|
|
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
|
|
|
|
|
{level} ParameterTypes = new Type[] {{ {parameterTypes} }},
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, parameters, special) => {funcInvoking}
|
|
|
|
|
{level}}}";
|
|
|
|
|
|
|
|
|
@@ -373,6 +377,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level} IsVoid = false,
|
|
|
|
|
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
|
|
|
|
|
{level} ParameterTypes = new Type[] {{ {parameterTypes} }},
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}],
|
|
|
|
|
{level}}}";
|
|
|
|
|
}
|
|
|
|
@@ -382,6 +387,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level}{{
|
|
|
|
|
{level} IsVoid = false,
|
|
|
|
|
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, _, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name},
|
|
|
|
|
{level}}}";
|
|
|
|
|
}
|
|
|
|
@@ -420,6 +426,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level} IsVoid = false,
|
|
|
|
|
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
|
|
|
|
|
{level} ParameterTypes = new Type[] {{ {parameterTypes} }},
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert},
|
|
|
|
|
{level}}}";
|
|
|
|
|
}
|
|
|
|
@@ -429,6 +436,7 @@ namespace mROA.Codegen
|
|
|
|
|
{level}{{
|
|
|
|
|
{level} IsVoid = false,
|
|
|
|
|
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
|
|
|
|
|
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
|
|
|
|
|
{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name} = {Caster((method.AssociatedSymbol as IPropertySymbol)!.Type, "parameters[0]")},
|
|
|
|
|
{level}}}";
|
|
|
|
|
}
|
|
|
|
|