Заработала демка с новым бэком

This commit is contained in:
2025-03-08 22:31:40 +03:00
parent 4863010b47
commit 0e09b479af
5 changed files with 18 additions and 18 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ class Program
public static void Main(string[] args) public static void Main(string[] args)
{ {
var builder = new FullMixBuilder(); var builder = new FullMixBuilder();
// new RemoteTypeBinder(); new RemoteTypeBinder();
// builder.Modules.Add(new JsonSerializationToolkit()); // builder.Modules.Add(new JsonSerializationToolkit());
builder.Modules.Add(new CborSerializationToolkit()); builder.Modules.Add(new CborSerializationToolkit());
+16 -8
View File
@@ -29,8 +29,8 @@ namespace mROA.Codegen
// var reader = new StreamReader(test); // var reader = new StreamReader(test);
// var allText = reader.ReadToEnd(); // var allText = reader.ReadToEnd();
var frontendContextRepo = new List<string>(); var frontendContextRepo = new List<string>();
List<IMethodSymbol> totalMethods = new List<IMethodSymbol>();
List<IMethodSymbol> innerMethods = new List<IMethodSymbol>();
List<string> invokers = new List<string>(); List<string> invokers = new List<string>();
var declarations = classes.ToList().OrderBy(i => i.Identifier.Text).ToList(); var declarations = classes.ToList().OrderBy(i => i.Identifier.Text).ToList();
foreach (var classDeclarationSyntax in declarations) foreach (var classDeclarationSyntax in declarations)
@@ -39,10 +39,11 @@ namespace mROA.Codegen
if (semanticModel.GetDeclaredSymbol(classDeclarationSyntax) is not INamedTypeSymbol classSymbol) if (semanticModel.GetDeclaredSymbol(classDeclarationSyntax) is not INamedTypeSymbol classSymbol)
continue; continue;
List<IMethodSymbol> innerMethods = new List<IMethodSymbol>();
var namespaceName = classSymbol.ContainingNamespace.ToDisplayString(); var namespaceName = classSymbol.ContainingNamespace.ToDisplayString();
var className = classDeclarationSyntax.Identifier.Text; var className = classDeclarationSyntax.Identifier.Text;
innerMethods.AddRange(CollectMembers(classSymbol)); innerMethods = CollectMembers(classSymbol);
var associated = innerMethods.Select(i => i.AssociatedSymbol).Where(i => i != null) var associated = innerMethods.Select(i => i.AssociatedSymbol).Where(i => i != null)
.Distinct(SymbolEqualityComparer.Default).Cast<ISymbol>().ToList(); .Distinct(SymbolEqualityComparer.Default).Cast<ISymbol>().ToList();
@@ -50,6 +51,8 @@ namespace mROA.Codegen
i.MethodKind != MethodKind.EventAdd && i.MethodKind != MethodKind.EventRemove) i.MethodKind != MethodKind.EventAdd && i.MethodKind != MethodKind.EventRemove)
.ToList(); .ToList();
totalMethods.AddRange(innerMethods);
var originalName = className; var originalName = className;
className = className.TrimStart('I') + "RemoteEndpoint"; className = className.TrimStart('I') + "RemoteEndpoint";
@@ -63,10 +66,10 @@ namespace mROA.Codegen
switch (method.MethodKind) switch (method.MethodKind)
{ {
case MethodKind.PropertyGet or MethodKind.PropertySet: case MethodKind.PropertyGet or MethodKind.PropertySet:
GeneratePropertyMethod(method, innerMethods, propertiesAccessMethods, invokers); GeneratePropertyMethod(method, totalMethods, propertiesAccessMethods, invokers);
continue; continue;
default: default:
GenerateDeclaredMethod(method, declaredMethods, innerMethods, invokers); GenerateDeclaredMethod(method, declaredMethods, totalMethods, invokers);
break; break;
} }
} }
@@ -132,11 +135,10 @@ namespace {namespaceName}
$"{{ typeof({classSymbol.ToDisplayString()}), typeof({namespaceName}.{className}) }}"); $"{{ typeof({classSymbol.ToDisplayString()}), typeof({namespaceName}.{className}) }}");
} }
if (innerMethods.Count != 0) if (totalMethods.Count != 0)
{ {
var methodsStringed = invokers; var methodsStringed = invokers;
var coCodegenRepoCode = @$"// <auto-generated/> var coCodegenRepoCode = @$"// <auto-generated/>
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
@@ -174,7 +176,7 @@ namespace mROA.Codegen
context.AddSource("CoCodegenMethodRepository.g.cs", SourceText.From(coCodegenRepoCode, Encoding.UTF8)); context.AddSource("CoCodegenMethodRepository.g.cs", SourceText.From(coCodegenRepoCode, Encoding.UTF8));
#endif #endif
} }
if (frontendContextRepo.Count != 0) if (frontendContextRepo.Count != 0)
{ {
var fronendRepoCode = @$"// <auto-generated/> var fronendRepoCode = @$"// <auto-generated/>
@@ -325,6 +327,7 @@ namespace mROA.Codegen
{level} IsVoid = {isVoid.ToString().ToLower()}, {level} IsVoid = {isVoid.ToString().ToLower()},
{(isVoid ? String.Empty : (level + "\t" + "ReturnType = typeof(" + ExtractTaskType(method.ReturnType)) + "),")} {(isVoid ? String.Empty : (level + "\t" + "ReturnType = typeof(" + ExtractTaskType(method.ReturnType)) + "),")}
{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, {level} ParameterTypes = new Type[] {{ {parameterTypes} }},
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
{level} Invoking = (i, parameters, special, post) => {funcInvoking}, {level} Invoking = (i, parameters, special, post) => {funcInvoking},
{level}}}"; {level}}}";
else else
@@ -333,6 +336,7 @@ namespace mROA.Codegen
{level} IsVoid = {isVoid.ToString().ToLower()}, {level} IsVoid = {isVoid.ToString().ToLower()},
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, {level} ParameterTypes = new Type[] {{ {parameterTypes} }},
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
{level} Invoking = (i, parameters, special) => {funcInvoking} {level} Invoking = (i, parameters, special) => {funcInvoking}
{level}}}"; {level}}}";
@@ -373,6 +377,7 @@ namespace mROA.Codegen
{level} IsVoid = false, {level} IsVoid = false,
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, {level} ParameterTypes = new Type[] {{ {parameterTypes} }},
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}], {level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}],
{level}}}"; {level}}}";
} }
@@ -382,6 +387,7 @@ namespace mROA.Codegen
{level}{{ {level}{{
{level} IsVoid = false, {level} IsVoid = false,
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), {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} Invoking = (i, _, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name},
{level}}}"; {level}}}";
} }
@@ -420,6 +426,7 @@ namespace mROA.Codegen
{level} IsVoid = false, {level} IsVoid = false,
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}),
{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, {level} ParameterTypes = new Type[] {{ {parameterTypes} }},
{level} SuitableType = typeof({method.ContainingType.ToDisplayString()}),
{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert}, {level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert},
{level}}}"; {level}}}";
} }
@@ -429,6 +436,7 @@ namespace mROA.Codegen
{level}{{ {level}{{
{level} IsVoid = false, {level} IsVoid = false,
{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), {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} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name} = {Caster((method.AssociatedSymbol as IPropertySymbol)!.Type, "parameters[0]")},
{level}}}"; {level}}}";
} }
@@ -79,7 +79,7 @@ namespace mROA.Implementation.Backend
object?[]? castedParams = null; object?[]? castedParams = null;
if (invoker.ParameterTypes != Type.EmptyTypes) if (invoker.ParameterTypes.Length != 0)
{ {
castedParams = new object[invoker.ParameterTypes.Length]; castedParams = new object[invoker.ParameterTypes.Length];
for (int i = 0; i < castedParams.Length; i++) for (int i = 0; i < castedParams.Length; i++)
-1
View File
@@ -20,7 +20,6 @@ namespace mROA.Implementation
public static readonly IMethodInvoker Dispose = new MethodInvoker public static readonly IMethodInvoker Dispose = new MethodInvoker
{ {
IsVoid = true, IsVoid = true,
ReturnType = null,
Invoking = (instance, _, _) => Invoking = (instance, _, _) =>
{ {
(instance as IDisposable)?.Dispose(); (instance as IDisposable)?.Dispose();
@@ -6,13 +6,6 @@ namespace mROA.Implementation
#pragma warning disable CS8618, CS9264 #pragma warning disable CS8618, CS9264
public struct UniversalObjectIdentifier : IEquatable<UniversalObjectIdentifier> public struct UniversalObjectIdentifier : IEquatable<UniversalObjectIdentifier>
{ {
private static IMethodInvoker x = new MethodInvoker
{
IsVoid = false,
ReturnType = typeof(void),
ParameterTypes = Type.EmptyTypes
};
public int ContextId; public int ContextId;
public int OwnerId; public int OwnerId;