123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace FlutterCodeGenerator
- {
- internal class ServiceMap
- {
- public List<MethodMap> MethodMapList;
- public static List<ComplexModelType> TemporaryList { get; set; }
- private List<ComplexModelType> _usedComplexModelTypeList;
- private List<string> _userDefinedComplexReturnTypeList;
- private string _serviceName;
- public ServiceMap(Type type)
- {
- _usedComplexModelTypeList = new List<ComplexModelType>();
- TemporaryList = new List<ComplexModelType>();
- MethodMapList = new List<MethodMap>();
- var methodsList = type.GetMethods();
- _serviceName = type.Name[1..];
- foreach (var method in methodsList)
- {
- var methodMap = new MethodMap(method);
- MethodMapList.Add(methodMap);
- }
- _usedComplexModelTypeList.AddRange(TemporaryList);
- }
- public string GetServiceModelDartString()
- {
- var dartString = new StringBuilder();
- foreach (var modelType in _usedComplexModelTypeList)
- {
- dartString.AppendLine(modelType.GetDartString());
- }
- if (string.IsNullOrWhiteSpace(dartString.ToString()))
- {
- return null;
- }
- var serviceModelDartString = new StringBuilder();
- if (dartString.ToString().Contains("FJsonConvert"))
- {
- serviceModelDartString.AppendLine(CodeGenerator.StringJsonConvert);
- serviceModelDartString.AppendLine();
- }
- serviceModelDartString.AppendLine(dartString.ToString());
- return serviceModelDartString.ToString();
- }
- public string GetServiceDartString()
- {
- var serviceDartString = new StringBuilder();
- serviceDartString.AppendLine($"class {_serviceName} extends JsonRpcClientBase {{");
- serviceDartString.AppendLine($"\t{_serviceName}(");
- serviceDartString.AppendLine("\t\tString host, {");
- serviceDartString.AppendLine($"\t\tString serviceName = \"I{_serviceName}\",");
- serviceDartString.AppendLine("\t\tMap<String, String>? headers,");
- serviceDartString.AppendLine("\t\tint? timeout,");
- serviceDartString.AppendLine("\t}) : super(");
- serviceDartString.AppendLine("\t\t\t\t\t\thost,");
- serviceDartString.AppendLine("\t\t\t\t\t\tserviceName,");
- serviceDartString.AppendLine("\t\t\t\t\t\theaders: headers,");
- serviceDartString.AppendLine("\t\t\t\t\t\ttimeout: timeout,");
- var complexReturnTypeNameList = GetUserDefinedComplexReturnTypeList();
- if (complexReturnTypeNameList.Count() == 0)
- {
- serviceDartString.AppendLine("\t\t\t\t);");
- }
- else
- {
- serviceDartString.AppendLine("\t\t\t\t) {");
- serviceDartString.AppendLine("\t\t/// 注册响应实体反序列化处理器");
- foreach (var complexRetrunTypeName in complexReturnTypeNameList)
- {
- serviceDartString.AppendLine($"\t\tFJsonConvert.setDecoder((map) => {complexRetrunTypeName}.fromJson(map));");
- }
- serviceDartString.AppendLine("\t}");
- }
- serviceDartString.AppendLine();
- foreach (var methodMap in MethodMapList)
- {
- serviceDartString.AppendLine(methodMap.GetMethodDartString());
- }
- serviceDartString.AppendLine("}");
- return serviceDartString.ToString();
- }
- public List<string> GetUserDefinedComplexReturnTypeList()
- {
- _userDefinedComplexReturnTypeList = new List<string>();
- foreach (var method in MethodMapList)
- {
- var veturnParameterModelType = method.ReturnParameterModelType;
- AddUserDefinedComplexReturnType(veturnParameterModelType);
- }
- return _userDefinedComplexReturnTypeList;
- }
- private void AddUserDefinedComplexReturnType(ModelType modelType)
- {
- if (modelType is UserDefinedComplexModeType)
- {
- if (!_userDefinedComplexReturnTypeList.Contains(modelType.GetFlutterTypeName()))
- {
- _userDefinedComplexReturnTypeList.Add(modelType.GetFlutterTypeName());
- }
- }
- else if (modelType is UserDefinedGenericComplexModelType userDefinedGenericComplexModelType)
- {
- if (!_userDefinedComplexReturnTypeList.Contains(userDefinedGenericComplexModelType.GetFlutterTypeName()))
- {
- _userDefinedComplexReturnTypeList.Add(userDefinedGenericComplexModelType.GetFlutterTypeName());
- }
- var argumentModelType = userDefinedGenericComplexModelType.GenericArgumentModelType;
- AddUserDefinedComplexReturnType(argumentModelType);
- }
- else if (modelType is ListModelType listModelType)
- {
- var argumentModelType = listModelType.GenericArgumentModelType;
- AddUserDefinedComplexReturnType(argumentModelType);
- }
- else if (modelType is DictionaryModelType dictionaryModelType)
- {
- foreach (var argumentModelType in dictionaryModelType.GenericArgumentModelTypeList)
- {
- AddUserDefinedComplexReturnType(argumentModelType);
- }
- }
- }
- }
- }
|