123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace FlutterCodeGenerator
- {
- internal class MethodMap
- {
- public List<ModelType> ParameterModelTypes;
- public ModelType ReturnParameterModelType { get; set; }
- private readonly string _methodName;
- public MethodMap(MethodInfo method)
- {
- ParameterModelTypes = new List<ModelType>();
- _methodName = method.Name;
- Type returnParameterType;
- if (!method.ReturnType.IsGenericType)
- {
- returnParameterType = typeof(void);
- }
- else
- {
- returnParameterType = method.ReturnType.GetGenericArguments()[0];
- }
- ReturnParameterModelType = ModelTypeGenerator.Create(returnParameterType, "", true);
- var parameters = method.GetParameters();
- foreach (var parameter in parameters)
- {
- var parameterType = parameter.ParameterType;
- var parameterModelType = ModelTypeGenerator.Create(parameterType, parameter.Name, true);
- ParameterModelTypes.Add(parameterModelType);
- }
- }
- public string GetMethodDartString()
- {
- var dartString = new StringBuilder();
- var parameterNames = string.Join(",", ParameterModelTypes.Select(r => r.GetFlutterTypeName() + " " + r.Name_Lower));
- var argumentNames = string.Join(",", ParameterModelTypes.Select(r => r.Name_Lower));
- if (ParameterModelTypes.Count > 1)
- {
- argumentNames = "[" + argumentNames + "]";
- }
- dartString.AppendLine($"\tFuture<{ReturnParameterModelType.GetFlutterTypeName()}> {LetterConverterHelper.FirstCharToLower(_methodName)}({parameterNames}) async {{");
- if (ReturnParameterModelType is VoidModelType)
- {
- dartString.AppendLine($"\t\tawait call(\"{_methodName}\", {argumentNames});");
- }
- else
- {
- 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\treturn rpcRst;");
- }
- else if (ReturnParameterModelType is UserDefinedModelType || ReturnParameterModelType is UserDefinedGenericModelType || ReturnParameterModelType is UserDefinedDerivedModelType)
- {
- 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 EnumModelType enumModelType)
- {
- dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{enumModelType.GetFlutterTypeName()}.values.firstWhere((i) => i.index == e)).toList();");
- dartString.AppendLine("\t\treturn result;");
- }
- else if (genericModelType.GenericArgumentModelType is UserDefinedModelType userDefinedComplexModelType)
- {
- dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModelType.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 (ReturnParameterModelType is ArrayModelType arrayModelType)
- {
- 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 EnumModelType enumModelType)
- {
- dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{enumModelType.GetFlutterTypeName()}.values.firstWhere((i) => i.index == e)).toList();");
- dartString.AppendLine("\t\treturn result;");
- }
- else if (arrayModelType.Child is UserDefinedModelType userDefinedComplexModelType)
- {
- dartString.AppendLine($"\t\tvar result = (rpcRst as List).map((e)=>{userDefinedComplexModelType.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;");
- }
- }
- else if (ReturnParameterModelType is DictionaryModelType dictionaryModelType)
- {
- dartString.AppendLine($"\t\tvar result = (rpcRst as Map).cast<{dictionaryModelType.GenericArgumentModelTypeList[0].GetFlutterTypeName()},{dictionaryModelType.GenericArgumentModelTypeList[1].GetFlutterTypeName()}>();");
- dartString.AppendLine("\t\treturn result;");
- }
- }
- dartString.AppendLine("\t}");
- return dartString.ToString();
- }
- }
- }
|