Browse Source

Add Void Model Type.

Felix 3 years ago
parent
commit
28de5247c5
4 changed files with 68 additions and 36 deletions
  1. 1 1
      CodeGenerator.cs
  2. 50 35
      MethodMap.cs
  3. 12 0
      ModeType.cs
  4. 5 0
      ModeTypeGenerator.cs

+ 1 - 1
CodeGenerator.cs

@@ -46,7 +46,7 @@ namespace FlutterCodeGenerator
             }
             var assemblybytes = File.ReadAllBytes(dll);
             var assembly = Assembly.Load(assemblybytes);
-            var interfaceTypes = assembly.GetTypes().Where(x => x.FullName.Contains("Interface") && x.Name.Contains("Service") && !x.Name.Contains("IManagementService")).ToList();
+            var interfaceTypes = assembly.GetTypes().Where(x => x.FullName.Contains("Interface") && x.Name.Contains("Service") && !x.Name.Contains("IManagement")).ToList();
             foreach (var interfaceType in interfaceTypes)
             {
                 var sericeName = interfaceType.Name[1..];

+ 50 - 35
MethodMap.cs

@@ -1,3 +1,4 @@
+using System;
 using System.Collections.Generic;
 using System.Data;
 using System.Linq;
@@ -16,7 +17,15 @@ namespace FlutterCodeGenerator
         {
             ParameterModeTypes = new List<ModelType>();
             _methodName = method.Name;
-            var returnParameterType = method.ReturnType.GetGenericArguments()[0];
+            Type returnParameterType;
+            if (!method.ReturnType.IsGenericType)
+            {
+                returnParameterType = typeof(void);
+            }
+            else
+            {
+                returnParameterType = method.ReturnType.GetGenericArguments()[0];
+            }
 
             ReturnParameterModelType = ModelTypeGenerator.Create(returnParameterType, "", true);
 
@@ -39,53 +48,59 @@ namespace FlutterCodeGenerator
                 argumentNames = "[" + argumentNames + "]";
             }
             dartString.AppendLine($"\tFuture<{ReturnParameterModelType.GetFlutterTypeName()}> {LetterConverterHelper.FirstCharToLower(_methodName)}({parameterNames}) async {{");
-            dartString.AppendLine($"\t\tvar rpcRst = await call(\"{_methodName}\", {argumentNames});");
-            if (ReturnParameterModelType is SimpleModelType && !(ReturnParameterModelType is ListModelType) && !(ReturnParameterModelType is DictionaryModelType) && !(ReturnParameterModelType is ArrayModelType))
+            if (ReturnParameterModelType is VoidModelType)
             {
-                dartString.AppendLine("\t\treturn rpcRst;");
+                dartString.AppendLine($"\t\tawait call(\"{_methodName}\", {argumentNames});");
             }
-            else if (ReturnParameterModelType is UserDefinedModeType || ReturnParameterModelType is UserDefinedGenericModelType || ReturnParameterModelType is UserDefinedDerivedModelType)
+            else
             {
-                dartString.AppendLine($"\t\tvar result = {ReturnParameterModelType.GetFlutterTypeName()}.fromJson(rpcRst as Map<String, dynamic>);");
-                dartString.AppendLine("\t\treturn result;");
-            }
-            else if (ReturnParameterModelType is ListModelType genericModelType)
-            {
-                if (genericModelType.GenericArgumentModelType is SimpleModelType simpleModelType)
-                {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).cast<{simpleModelType.GetFlutterTypeName()}>().toList();");
-                    dartString.AppendLine("\t\treturn result;");
-                }
-                else if (genericModelType.GenericArgumentModelType is UserDefinedModeType userDefinedComplexModeType)
+                dartString.AppendLine($"\t\tvar rpcRst = await call(\"{_methodName}\", {argumentNames});");
+                if (ReturnParameterModelType is SimpleModelType && !(ReturnParameterModelType is ListModelType) && !(ReturnParameterModelType is DictionaryModelType) && !(ReturnParameterModelType is ArrayModelType))
                 {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModeType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
-                    dartString.AppendLine("\t\treturn result;");
+                    dartString.AppendLine("\t\treturn rpcRst;");
                 }
-                else if (genericModelType.GenericArgumentModelType is UserDefinedDerivedModelType userDefinedDerivedModelType)
+                else if (ReturnParameterModelType is UserDefinedModeType || ReturnParameterModelType is UserDefinedGenericModelType || ReturnParameterModelType is UserDefinedDerivedModelType)
                 {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedDerivedModelType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
+                    dartString.AppendLine($"\t\tvar result = {ReturnParameterModelType.GetFlutterTypeName()}.fromJson(rpcRst as Map<String, dynamic>);");
                     dartString.AppendLine("\t\treturn result;");
                 }
-            }
-            else if (ReturnParameterModelType is ArrayModelType arrayModelType)
-            {
-                if (arrayModelType.Child is SimpleModelType simpleModelType)
+                else if (ReturnParameterModelType is ListModelType genericModelType)
                 {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).cast<{simpleModelType.GetFlutterTypeName()}>().toList();");
-                    dartString.AppendLine("\t\treturn result;");
+                    if (genericModelType.GenericArgumentModelType is SimpleModelType simpleModelType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).cast<{simpleModelType.GetFlutterTypeName()}>().toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
+                    else if (genericModelType.GenericArgumentModelType is UserDefinedModeType userDefinedComplexModeType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModeType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
+                    else if (genericModelType.GenericArgumentModelType is UserDefinedDerivedModelType userDefinedDerivedModelType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedDerivedModelType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
                 }
-                else if (arrayModelType.Child is UserDefinedModeType userDefinedComplexModeType)
+                else if (ReturnParameterModelType is ArrayModelType arrayModelType)
                 {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModeType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
-                    dartString.AppendLine("\t\treturn result;");
-                }
-                else if (arrayModelType.Child is UserDefinedDerivedModelType userDefinedDerivedModelType)
-                {
-                    dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedDerivedModelType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
-                    dartString.AppendLine("\t\treturn result;");
+                    if (arrayModelType.Child is SimpleModelType simpleModelType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).cast<{simpleModelType.GetFlutterTypeName()}>().toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
+                    else if (arrayModelType.Child is UserDefinedModeType userDefinedComplexModeType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModeType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
+                    else if (arrayModelType.Child is UserDefinedDerivedModelType userDefinedDerivedModelType)
+                    {
+                        dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedDerivedModelType.GetFlutterTypeName()}.fromJson(e as Map<String, dynamic>)).toList();");
+                        dartString.AppendLine("\t\treturn result;");
+                    }
                 }
             }
-
             dartString.AppendLine("\t}");
             return dartString.ToString();
         }

+ 12 - 0
ModeType.cs

@@ -99,6 +99,17 @@ namespace FlutterCodeGenerator
         }
     }
 
+    public class VoidModelType : SimpleModelType
+    {
+        public VoidModelType(string name) : base(typeof(void), name)
+        {
+        }
+        public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
+        {
+            return "void";
+        }
+    }
+
     public class DoubleModeType : SimpleModelType
     {
         public DoubleModeType(string name) : base(typeof(int), name)
@@ -397,6 +408,7 @@ namespace FlutterCodeGenerator
     public class ArrayModelType : SimpleModelType
     {
         public ModelType Child;
+
         public ArrayModelType(Type type, string name) : base(type, name)
         {
             var arrayTypeName = ParameterType.FullName.Replace("[]", string.Empty);

+ 5 - 0
ModeTypeGenerator.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
 
 namespace FlutterCodeGenerator
 {
@@ -47,6 +48,10 @@ namespace FlutterCodeGenerator
                 {
                     return new ByteModelType(argName);
                 }
+                else if(type==typeof(void))
+                {
+                    return new VoidModelType(argName);
+                }
                 else if (type.IsEnum)
                 {
                     var modelType = new EnumModeType(type, argName);