From 0d8ac91a3f96f83e4d351dd331f68115300f1cdf Mon Sep 17 00:00:00 2001 From: stylefeng Date: Tue, 6 Aug 2024 23:53:45 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.3.0=E3=80=91=E3=80=90scanner?= =?UTF-8?q?=E3=80=91=E6=9B=B4=E6=96=B0=E9=AB=98=E7=BA=A7class=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E8=A7=A3=E6=9E=90=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/util/AdvancedClassTypeUtil.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/AdvancedClassTypeUtil.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/AdvancedClassTypeUtil.java index 411ffa114..310db6f7c 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/AdvancedClassTypeUtil.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/util/AdvancedClassTypeUtil.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import cn.stylefeng.roses.kernel.rule.enums.FieldTypeEnum; +import cn.stylefeng.roses.kernel.rule.pojo.clazz.ClassParseResult; import cn.stylefeng.roses.kernel.scanner.api.pojo.scanner.ScannerProperties; import lombok.extern.slf4j.Slf4j; @@ -77,7 +78,7 @@ public class AdvancedClassTypeUtil { * @author fengshuonan * @since 2022/1/14 0:25 */ - public static FieldTypeEnum getClassFieldType(Type type) { + public static ClassParseResult getClassFieldType(Type type) { // 如果是具体类,不带泛型 if (type instanceof Class) { @@ -86,39 +87,30 @@ public class AdvancedClassTypeUtil { // 判断是否是基本类型,如果是Map或者Object,也认定为基本类型,不解析他们的字段 if (ClassUtil.isSimpleValueType(clazz)) { - return FieldTypeEnum.BASIC; + return new ClassParseResult(FieldTypeEnum.BASIC, null); } // 判断是否是数组类型 else if (clazz.isArray()) { // 获取array的具体类型 Class componentType = clazz.getComponentType(); - if (ClassUtil.isSimpleValueType(componentType)) { - return FieldTypeEnum.BASE_ARRAY; - } else { - return FieldTypeEnum.ARRAY_WITH_OBJECT; - } + return new ClassParseResult(FieldTypeEnum.ARRAY, componentType); } // 如果是集合类型,纯集合类型,不带泛型 else if (Collection.class.isAssignableFrom(clazz)) { - return FieldTypeEnum.BASE_COLLECTION; + return new ClassParseResult(FieldTypeEnum.COLLECTION, null); } // 如果是实体对象类型 else if (AdvancedClassTypeUtil.ensureEntityFlag(clazz)) { - return FieldTypeEnum.OBJECT; - } - - // 如果是Object类型,则认定为基本类型,不解析他的具体内容 - else if (Object.class.equals(clazz)) { - return FieldTypeEnum.BASIC; + return new ClassParseResult(FieldTypeEnum.OBJECT, null); } // 其他类型,暂不处理 else { log.debug("类型是Class,但有处理不到的情况,打印出类的信息如下:{}", clazz.toGenericString()); - return FieldTypeEnum.OTHER; + return new ClassParseResult(FieldTypeEnum.OTHER, null); } } @@ -127,48 +119,43 @@ public class AdvancedClassTypeUtil { ParameterizedType parameterizedType = (ParameterizedType) type; - // 泛型类的主体 - Type rawType = parameterizedType.getRawType(); + // 泛型的主体,例如 List,主体是List + Class rawTypeClass = (Class) parameterizedType.getRawType(); - if (rawType instanceof Class) { - Class rawTypeClass = (Class) rawType; + // 泛型的类型,例如 List,类型是String + Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0]; - // 如果泛型主体是集合 - if (Collection.class.isAssignableFrom(rawTypeClass)) { - return FieldTypeEnum.COLLECTION_WITH_OBJECT; - } + // 如果泛型主体是集合 + if (Collection.class.isAssignableFrom(rawTypeClass)) { + return new ClassParseResult(FieldTypeEnum.COLLECTION, actualTypeArgument); + } - // 如果泛型的主体是实体包装类 - else if (AdvancedClassTypeUtil.ensureEntityFlag(rawTypeClass)) { - return FieldTypeEnum.OBJECT_WITH_GENERIC; - } + // 如果是map类型,则认定为基本类型,不做处理,不解析他的元数据 + else if (Map.class.isAssignableFrom(rawTypeClass)) { + return new ClassParseResult(FieldTypeEnum.BASIC, null); + } - // 如果是map类型,则认定为基本类型,不做处理,不解析他的元数据 - else if (Map.class.isAssignableFrom(rawTypeClass)) { - return FieldTypeEnum.BASIC; - } + // 如果泛型的主体是实体包装类 + else if (AdvancedClassTypeUtil.ensureEntityFlag(rawTypeClass)) { + return new ClassParseResult(FieldTypeEnum.OBJECT_WITH_GENERIC, actualTypeArgument); + } - // 泛型的主体情况不确定,不处理 - else { - log.debug("泛型的主体情况不确定,不处理,打印出rawTypeClass:{}", rawTypeClass.getName()); - return FieldTypeEnum.OTHER; - } - } else { - // 泛型的主体是别的类型 - log.debug("rawType为非Class类型?打印出rawType:{}", rawType.getTypeName()); - return FieldTypeEnum.OTHER; + // 泛型的主体情况不确定,不处理 + else { + log.debug("泛型的主体情况不确定,不处理,打印出rawTypeClass:{}", rawTypeClass.getName()); + return new ClassParseResult(FieldTypeEnum.OTHER, null); } } // 带T的参数,例如解析到ResponseData中的data字段就是这种情况 else if (type.getTypeName().equals("T")) { - return FieldTypeEnum.WITH_UNKNOWN_GENERIC; + return new ClassParseResult(FieldTypeEnum.WITH_UNKNOWN_GENERIC, null); } // 其他情况,既不是class也不是ParameterizedType else { log.debug("未知类型的处理,既不是class也不是ParameterizedType,打印出类的信息如下:{}", type.getTypeName()); - return FieldTypeEnum.OTHER; + return new ClassParseResult(FieldTypeEnum.OTHER, null); } }