From 0e09b479afa3caf9c59088189641932d1d2f5809 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Sat, 8 Mar 2025 22:31:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0=20=D0=B4=D0=B5=D0=BC=D0=BA=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=BC=20=D0=B1=D1=8D=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example.Frontend/Program.cs | 2 +- mROA.Codegen/mROASourceGenerator.cs | 24 ++++++++++++------- .../Backend/BasicExecutionModule.cs | 2 +- mROA/Implementation/MethodInvoker.cs | 1 - .../UniversalObjectIdentifier.cs | 7 ------ 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Example.Frontend/Program.cs b/Example.Frontend/Program.cs index 427df96..fdab3b8 100644 --- a/Example.Frontend/Program.cs +++ b/Example.Frontend/Program.cs @@ -17,7 +17,7 @@ class Program public static void Main(string[] args) { var builder = new FullMixBuilder(); - // new RemoteTypeBinder(); + new RemoteTypeBinder(); // builder.Modules.Add(new JsonSerializationToolkit()); builder.Modules.Add(new CborSerializationToolkit()); diff --git a/mROA.Codegen/mROASourceGenerator.cs b/mROA.Codegen/mROASourceGenerator.cs index d31c93f..469023e 100644 --- a/mROA.Codegen/mROASourceGenerator.cs +++ b/mROA.Codegen/mROASourceGenerator.cs @@ -29,8 +29,8 @@ namespace mROA.Codegen // var reader = new StreamReader(test); // var allText = reader.ReadToEnd(); var frontendContextRepo = new List(); + List totalMethods = new List(); - List innerMethods = new List(); List invokers = new List(); 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 innerMethods = new List(); 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().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 = @$"// 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 = @$"// @@ -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}}}"; } diff --git a/mROA/Implementation/Backend/BasicExecutionModule.cs b/mROA/Implementation/Backend/BasicExecutionModule.cs index 3e94cb2..7199b42 100644 --- a/mROA/Implementation/Backend/BasicExecutionModule.cs +++ b/mROA/Implementation/Backend/BasicExecutionModule.cs @@ -79,7 +79,7 @@ namespace mROA.Implementation.Backend object?[]? castedParams = null; - if (invoker.ParameterTypes != Type.EmptyTypes) + if (invoker.ParameterTypes.Length != 0) { castedParams = new object[invoker.ParameterTypes.Length]; for (int i = 0; i < castedParams.Length; i++) diff --git a/mROA/Implementation/MethodInvoker.cs b/mROA/Implementation/MethodInvoker.cs index 4edea72..59efb7d 100644 --- a/mROA/Implementation/MethodInvoker.cs +++ b/mROA/Implementation/MethodInvoker.cs @@ -20,7 +20,6 @@ namespace mROA.Implementation public static readonly IMethodInvoker Dispose = new MethodInvoker { IsVoid = true, - ReturnType = null, Invoking = (instance, _, _) => { (instance as IDisposable)?.Dispose(); diff --git a/mROA/Implementation/UniversalObjectIdentifier.cs b/mROA/Implementation/UniversalObjectIdentifier.cs index 694636c..29491f2 100644 --- a/mROA/Implementation/UniversalObjectIdentifier.cs +++ b/mROA/Implementation/UniversalObjectIdentifier.cs @@ -6,13 +6,6 @@ namespace mROA.Implementation #pragma warning disable CS8618, CS9264 public struct UniversalObjectIdentifier : IEquatable { - private static IMethodInvoker x = new MethodInvoker - { - IsVoid = false, - ReturnType = typeof(void), - ParameterTypes = Type.EmptyTypes - - }; public int ContextId; public int OwnerId;