【8.3.0】【scanner】完善class解析过程

master
stylefeng 2024-08-07 14:20:44 +08:00
parent d066a513c2
commit 4bb806bbb8
2 changed files with 8 additions and 50 deletions

View File

@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -41,7 +42,7 @@ public class ClassMetaFactory {
// 1. 如果是基础类型,直接渲染结果
if (FieldTypeEnum.BASIC.equals(classParseResult.getFieldTypeEnum())) {
return MetadataCreateFactory.createBaseClassMetadata((Class<?>) type, uuid);
return MetadataCreateFactory.createBaseClassMetadata((Class<?>) type, classParseResult.getFieldTypeEnum(), uuid);
}
// 2. 如果是数组类型,则先创建一个数组类型的元数据,再获取数组具体的类型,再继续解析数组的类型
@ -60,7 +61,7 @@ public class ClassMetaFactory {
Class<?> clazz = (Class<?>) type;
// 创建对象的基础信息
FieldMetadata currentClassMetaData = MetadataCreateFactory.createBaseClassMetadata((Class<?>) type, uuid);
FieldMetadata currentClassMetaData = MetadataCreateFactory.createBaseClassMetadata((Class<?>) type, classParseResult.getFieldTypeEnum(), uuid);
// 如果被初始化过,则不继续进行解析
if (MetadataContext.ensureFieldClassHaveParse(uuid, clazz)) {
@ -107,12 +108,12 @@ public class ClassMetaFactory {
// 6. Map的类型
else if (FieldTypeEnum.MAP.equals(classParseResult.getFieldTypeEnum())) {
return MetadataCreateFactory.createBaseClassMetadata(Map.class, uuid);
return MetadataCreateFactory.createBaseClassMetadata(Map.class, FieldTypeEnum.MAP, uuid);
}
// 7. 其他情况,返回最基本的数据
else {
return MetadataCreateFactory.createBaseClassMetadata(String.class, uuid);
return MetadataCreateFactory.createBaseClassMetadata(String.class, FieldTypeEnum.BASIC, uuid);
}
}
@ -124,7 +125,7 @@ public class ClassMetaFactory {
*/
private static FieldMetadata createArrayMetaDateResult(String uuid, ClassParseResult classParseResult) {
// 先创建一个数组类型的元数据
FieldMetadata arrayItemMetadata = MetadataCreateFactory.createArrayItemMetadata(uuid);
FieldMetadata arrayItemMetadata = MetadataCreateFactory.createBaseClassMetadata(List.class, FieldTypeEnum.COLLECTION, uuid);
// 获取数组元素的类型
Type genericType = classParseResult.getGenericType();

View File

@ -28,7 +28,7 @@ public class MetadataCreateFactory {
* @author fengshuonan
* @since 2024/8/7 9:48
*/
public static FieldMetadata createBaseClassMetadata(Class<?> clazz, String uuid) {
public static FieldMetadata createBaseClassMetadata(Class<?> clazz, FieldTypeEnum fieldTypeEnum, String uuid) {
FieldMetadata fieldMetadataItem = new FieldMetadata();
// 设置唯一id
@ -50,50 +50,7 @@ public class MetadataCreateFactory {
}
// 设置字段类型,基本类型
fieldMetadataItem.setFieldType(FieldTypeEnum.BASIC.getCode());
// 设置当前context构造的参数类型
ParamTypeEnum paramTypeMetadata = MetadataContext.getParamTypeMetadata(uuid);
if (paramTypeMetadata != null) {
fieldMetadataItem.setRequestParamType(paramTypeMetadata.getCode());
}
// 设置字段
return fieldMetadataItem;
}
/**
*
*
* @author fengshuonan
* @since 2024/8/7 9:53
*/
public static FieldMetadata createArrayItemMetadata(String uuid) {
FieldMetadata fieldMetadataItem = new FieldMetadata();
// 设置唯一id
fieldMetadataItem.setMetadataId(IdUtil.fastSimpleUUID());
// 设置字段中文含义
fieldMetadataItem.setChineseName("数组元素");
// 设置字段类类型
fieldMetadataItem.setFieldClassType("String");
// 设置类的全路径
fieldMetadataItem.setFieldClassPath("java.lang.String");
// 设置字段名称
fieldMetadataItem.setFieldName("arrayItem");
// 根据uuid获取参数的名称
String paramName = MetadataContext.getParamName(uuid);
if (StrUtil.isNotBlank(paramName)) {
fieldMetadataItem.setFieldName(paramName);
}
// 设置数组类型
fieldMetadataItem.setFieldType(FieldTypeEnum.ARRAY.getCode());
fieldMetadataItem.setFieldType(fieldTypeEnum.getCode());
// 设置当前context构造的参数类型
ParamTypeEnum paramTypeMetadata = MetadataContext.getParamTypeMetadata(uuid);