123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- using FlutterCodeGenerator.Helper;
- using FlutterCodeGenerator.Model;
- using FlutterCodeGenerator.ModelTypes;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace FlutterCodeGenerator.Map
- {
- internal class MethodMap
- {
- public List<ModelType> ParameterModelTypes;
- public ModelType ReturnParameterModelType { get; set; }
- public string MethodName { get; private set; }
- public MethodMap(MethodInfo method)
- {
- MethodName = method.Name;
- GenerateDataCache.Instance.CurrentMethod = MethodName;
- ParameterModelTypes = new List<ModelType>();
- Type returnParameterType;
- if (method.ReturnType.Name != "Task`1")
- {
- returnParameterType = method.ReturnType;
- }
- 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;");
- }
- else if (ReturnParameterModelType is EnumModelType enumModelType)
- {
- dartString.AppendLine($"\t\tvar result = {enumModelType.GetFlutterTypeName()}.values.firstWhere((e) => e.index == rpcRst);");
- dartString.AppendLine("\t\treturn result;");
- }
- }
- dartString.AppendLine("\t}");
- return dartString.ToString();
- }
- }
- }
|