Browse Source

当有重名的类,自动更名功能实现

Felix 3 years ago
parent
commit
d0220e78d2
3 changed files with 137 additions and 34 deletions
  1. 61 13
      ModeType.cs
  2. 70 4
      ModeTypeGenerator.cs
  3. 6 17
      ServiceMap.cs

+ 61 - 13
ModeType.cs

@@ -21,12 +21,18 @@ namespace FlutterCodeGenerator
 
         public string DefaultValue { get; set; }
 
+        /// <summary>
+        /// Index(For Same Name)
+        /// </summary>
+        public int Index { get; set; }
+
         public ModelType(Type type, string name)
         {
             ParameterType = type;
             Name_Lower = LetterConverterHelper.FirstCharToLower(name);
             Name_Upper = LetterConverterHelper.FirstCharToUpper(name);
             DefaultValue = null;
+            Index = 1;
         }
 
         public virtual string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
@@ -420,7 +426,14 @@ namespace FlutterCodeGenerator
         public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
         {
             var parameterTypeName = Child.GetFlutterTypeName();
-            return $"List<{parameterTypeName}>";
+            if (Index > 1)
+            {
+                return $"List<{parameterTypeName}{Index}>";
+            }
+            else
+            {
+                return $"List<{parameterTypeName}>";
+            }
         }
     }
 
@@ -509,21 +522,42 @@ namespace FlutterCodeGenerator
 
         public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
         {
-            if (isDefault)
+            if (Index > 1)
             {
-                return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
-            }
+                if (isDefault)
+                {
+                    return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + Index + ">";
+                }
 
-            if (isGenericName)
-            {
-                return ParameterType.Name[0..^2] + "<T>";
+                if (isGenericName)
+                {
+                    return ParameterType.Name[0..^2] + Index + "<T>";
+                }
+                if (isSingle)
+                {
+                    return ParameterType.Name[0..^2] + Index;
+                }
+
+                return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + Index + ">";
             }
-            if (isSingle)
+            else
             {
-                return ParameterType.Name[0..^2];
-            }
+                if (isDefault)
+                {
+                    return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
+                }
 
-            return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
+                if (isGenericName)
+                {
+                    return ParameterType.Name[0..^2] + "<T>";
+                }
+                if (isSingle)
+                {
+                    return ParameterType.Name[0..^2];
+                }
+
+                return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
+            }
         }
 
         public override string GetDartString()
@@ -585,7 +619,14 @@ namespace FlutterCodeGenerator
 
         public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
         {
-            return $"{ParameterType.Name}";
+            if (Index > 1)
+            {
+                return $"{ParameterType.Name}{Index}";
+            }
+            else
+            {
+                return $"{ParameterType.Name}";
+            }
         }
 
         public override string GetDartString()
@@ -651,7 +692,14 @@ namespace FlutterCodeGenerator
 
         public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
         {
-            return $"{ParameterType.Name}";
+            if (Index > 1)
+            {
+                return $"{ParameterType.Name}{Index}";
+            }
+            else
+            {
+                return $"{ParameterType.Name}";
+            }
         }
 
         public override string GetDartString()

+ 70 - 4
ModeTypeGenerator.cs

@@ -1,13 +1,11 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Threading.Tasks;
 
 namespace FlutterCodeGenerator
 {
     public class ModelTypeGenerator
     {
-
         public static Dictionary<Type, int> _tempTypes = new Dictionary<Type, int>();
 
         public static ModelType Create(Type type, string argName, bool clearTypes = false)
@@ -40,7 +38,7 @@ namespace FlutterCodeGenerator
                 {
                     return new StringModeType(argName);
                 }
-                else if(type.BaseType.Name=="BaseParamsString")
+                else if (type.BaseType.Name == "BaseParamsString")
                 {
                     return new StringModeType(argName);
                 }
@@ -52,13 +50,30 @@ namespace FlutterCodeGenerator
                 {
                     return new ByteModelType(argName);
                 }
-                else if(type==typeof(void))
+                else if (type == typeof(void))
                 {
                     return new VoidModelType(argName);
                 }
                 else if (type.IsEnum)
                 {
                     var modelType = new EnumModeType(type, argName);
+                    if (!CodeGenerator.ConflictModelTypeList.ContainsKey(modelType.ParameterType.Name))
+                    {
+                        CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name] = new Dictionary<ModelType, int>() { { modelType, 1 } };
+                    }
+                    else
+                    {
+                        if (!CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Any(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
+                        {
+                            var index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Count() + 1;
+                            modelType.Index = index;
+                            CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name][modelType] = index;
+                        }
+                        else
+                        {
+                            modelType.Index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].FirstOrDefault(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
+                        }
+                    }
                     if (!ServiceMap.TemporaryList.Any(x => x.ParameterType == type))
                     {
                         ServiceMap.TemporaryList.Add(modelType);
@@ -74,6 +89,23 @@ namespace FlutterCodeGenerator
                 {
                     _tempTypes[type] = duplicatedTime;
                     var modelType = new UserDefinedDerivedModelType(type, argName);
+                    if (!CodeGenerator.ConflictModelTypeList.ContainsKey(modelType.ParameterType.Name))
+                    {
+                        CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name] = new Dictionary<ModelType, int>() { { modelType, 1 } };
+                    }
+                    else
+                    {
+                        if (!CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Any(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
+                        {
+                            var index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Count() + 1;
+                            modelType.Index = index;
+                            CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name][modelType] = index;
+                        }
+                        else
+                        {
+                            modelType.Index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].FirstOrDefault(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
+                        }
+                    }
                     if (!ServiceMap.TemporaryList.Any(x => x.ParameterType == type))
                     {
                         ServiceMap.TemporaryList.Add(modelType);
@@ -96,6 +128,23 @@ namespace FlutterCodeGenerator
                     {
                         _tempTypes[type] = duplicatedTime;
                         var modelType = new UserDefinedGenericModelType(type, argName);
+                        if (!CodeGenerator.ConflictModelTypeList.ContainsKey(modelType.ParameterType.Name))
+                        {
+                            CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name] = new Dictionary<ModelType, int>() { { modelType, 1 } };
+                        }
+                        else
+                        {
+                            if (!CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Any(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
+                            {
+                                var index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Count() + 1;
+                                modelType.Index = index;
+                                CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name][modelType] = index;
+                            }
+                            else
+                            {
+                                modelType.Index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].FirstOrDefault(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
+                            }
+                        }
                         if (!ServiceMap.TemporaryList.Any(x => x.ParameterType == type))
                         {
                             ServiceMap.TemporaryList.Add(modelType);
@@ -107,6 +156,23 @@ namespace FlutterCodeGenerator
                 {
                     _tempTypes[type] = duplicatedTime;
                     var modelType = new UserDefinedModeType(type, argName);
+                    if (!CodeGenerator.ConflictModelTypeList.ContainsKey(modelType.ParameterType.Name))
+                    {
+                        CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name] = new Dictionary<ModelType, int>() { { modelType, 1 } };
+                    }
+                    else
+                    {
+                        if (!CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Any(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
+                        {
+                            var index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Count() + 1;
+                            modelType.Index = index;
+                            CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name][modelType] = index;
+                        }
+                        else
+                        {
+                            modelType.Index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].FirstOrDefault(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
+                        }
+                    }
                     if (!ServiceMap.TemporaryList.Any(x => x.ParameterType == type))
                     {
                         ServiceMap.TemporaryList.Add(modelType);

+ 6 - 17
ServiceMap.cs

@@ -37,32 +37,21 @@ namespace FlutterCodeGenerator
             var importServiceList = new List<string>();
             foreach (var modelType in _usedComplexModelTypeList)
             {
-                if (!CodeGenerator.AlreadyGeneratedList.Any(x => x.Key.ParameterType.Name == modelType.ParameterType.Name))
+                if (!CodeGenerator.AlreadyGeneratedList.Any(x => x.Key.ParameterType.Name == modelType.ParameterType.Name && x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
                 {
                     CodeGenerator.AlreadyGeneratedList.Add(modelType, _serviceName);
-                    CodeGenerator.ConflictModelTypeList.Add(modelType.ParameterType.Name, new Dictionary<ModelType, int>() { { modelType, 1 } });
                     dartString.AppendLine(modelType.GetDartString());
                 }
                 else
                 {
-                    if (!CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Any(x => x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace))
+                    var importService = CodeGenerator.AlreadyGeneratedList.FirstOrDefault(x => x.Key.ParameterType.Name == modelType.ParameterType.Name && x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
+                    if (importService == null)
                     {
-                        var index = CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name].Count() + 1;
-                        CodeGenerator.ConflictModelTypeList[modelType.ParameterType.Name][modelType] = index;
-                        CodeGenerator.AlreadyGeneratedList.Add(modelType, _serviceName);
-                        dartString.AppendLine(modelType.GetDartString());
+                        throw new Exception("Import Service is null");
                     }
-                    else
+                    if (importService != _serviceName && !importServiceList.Contains(importService))
                     {
-                        var importService = CodeGenerator.AlreadyGeneratedList.FirstOrDefault(x => x.Key.ParameterType.Name == modelType.ParameterType.Name && x.Key.ParameterType.Namespace == modelType.ParameterType.Namespace).Value;
-                        if (importService == null)
-                        {
-                            throw new Exception("Import Service is null");
-                        }
-                        if (importService != _serviceName && !importServiceList.Contains(importService))
-                        {
-                            importServiceList.Add(importService);
-                        }
+                        importServiceList.Add(importService);
                     }
                 }
             }