in dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/utils/ClassTypeUtil.java [220:351]
public static Object initClassTypeWithDefaultValueNoProceeField(
Type genericType, Class<?> classType, int processCount,
Map<String, String> methodPrarmGenericTypeAndNamesMap) {
if (null == classType) {
return EMPTY_OBJECT_INSTANCE;
}
if (Integer.class.isAssignableFrom(classType) || int.class.isAssignableFrom(classType)) {
return 0;
} else if (Byte.class.isAssignableFrom(classType) || byte.class.isAssignableFrom(classType)) {
return (byte) 0;
} else if (Long.class.isAssignableFrom(classType) || long.class.isAssignableFrom(classType)) {
return 0L;
} else if (Double.class.isAssignableFrom(classType) || double.class.isAssignableFrom(classType)) {
return 0.0D;
} else if (Float.class.isAssignableFrom(classType) || float.class.isAssignableFrom(classType)) {
return 0.0F;
} else if (String.class.isAssignableFrom(classType)) {
return STRING_EMPTY;
} else if (Character.class.isAssignableFrom(classType) || char.class.isAssignableFrom(classType)) {
return 'c';
} else if (Short.class.isAssignableFrom(classType) || short.class.isAssignableFrom(classType)) {
return (short) 0;
} else if (Boolean.class.isAssignableFrom(classType) || boolean.class.isAssignableFrom(classType)) {
return false;
} else if (Date.class.isAssignableFrom(classType)) {
return "【" + Date.class.getName() + "】yyyy-MM-dd HH:mm:ss";
} else if (LocalDate.class.isAssignableFrom(classType)) {
return "【" + LocalDate.class.getName() + "】yyyy-MM-dd";
} else if (LocalDateTime.class.isAssignableFrom(classType)) {
return "【" + LocalDateTime.class.getName() + "】yyyy-MM-dd HH:mm:ss";
} else if (Enum.class.isAssignableFrom(classType)) {
Object[] enumConstants = classType.getEnumConstants();
StringBuilder sb = new StringBuilder(ENUM_VALUES_SEPARATOR);
try {
Method getName = classType.getMethod(METHOD_NAME_NAME);
for (Object obj : enumConstants) {
sb.append(getName.invoke(obj)).append(ENUM_VALUES_SEPARATOR);
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
LOG.error(e.getMessage(), e);
}
return sb.toString();
} else if (classType.isArray()) {
Object obj;
if (null != genericType && genericType instanceof GenericArrayType) {
GenericArrayType pt = (GenericArrayType) genericType;
String subTypeName = pt.getGenericComponentType().getTypeName();
boolean isBuildClassAttribute = false;
if (null != methodPrarmGenericTypeAndNamesMap) {
String subTypeGenericTypeName = methodPrarmGenericTypeAndNamesMap.get(subTypeName);
if (StringUtils.isNotBlank(subTypeGenericTypeName)) {
subTypeName = subTypeGenericTypeName;
isBuildClassAttribute = true;
}
}
obj = initClassTypeWithDefaultValue(makeParameterizedType(subTypeName), makeClass(subTypeName),
processCount, isBuildClassAttribute, methodPrarmGenericTypeAndNamesMap);
} else {
Class<?> arrType = classType.getComponentType();
obj = initClassTypeWithDefaultValue(null, arrType, processCount, methodPrarmGenericTypeAndNamesMap);
}
return new Object[]{obj};
} else if (Collection.class.isAssignableFrom(classType)) {
List<Object> list = new ArrayList<>(1);
if (null == genericType) {
list.add(EMPTY_OBJECT_INSTANCE);
return list;
}
Object obj;
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
String subTypeName = pt.getActualTypeArguments()[0].getTypeName();
boolean isBuildClassAttribute = false;
if (null != methodPrarmGenericTypeAndNamesMap) {
String subTypeGenericTypeName = methodPrarmGenericTypeAndNamesMap.get(subTypeName);
if (StringUtils.isNotBlank(subTypeGenericTypeName)) {
subTypeName = subTypeGenericTypeName;
isBuildClassAttribute = true;
}
}
obj = initClassTypeWithDefaultValue(makeParameterizedType(subTypeName), makeClass(subTypeName),
processCount, isBuildClassAttribute, methodPrarmGenericTypeAndNamesMap);
list.add(obj);
}
return list;
} else if (Map.class.isAssignableFrom(classType)) {
Map<String, Object> map = new HashMap<>(1);
if (genericType == null) {
map.put(STRING_KEY, EMPTY_OBJECT_INSTANCE);
return map;
}
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
String subTypeName = pt.getActualTypeArguments()[1].getTypeName();
boolean isBuildClassAttribute = false;
if (null != methodPrarmGenericTypeAndNamesMap) {
String subTypeGenericTypeName = methodPrarmGenericTypeAndNamesMap.get(subTypeName);
if (StringUtils.isNotBlank(subTypeGenericTypeName)) {
subTypeName = subTypeGenericTypeName;
isBuildClassAttribute = true;
} else {
map.put(STRING_KEY, EMPTY_OBJECT_INSTANCE);
return map;
}
}
Object objValue = initClassTypeWithDefaultValue(makeParameterizedType(subTypeName), makeClass(subTypeName),
processCount, isBuildClassAttribute, methodPrarmGenericTypeAndNamesMap);
map.put(STRING_KEY, objValue);
}
return map;
} else if (CompletableFuture.class.isAssignableFrom(classType)) {
// process CompletableFuture
if (genericType == null) {
return EMPTY_OBJECT_INSTANCE;
}
ParameterizedType pt = (ParameterizedType) genericType;
String typeName = pt.getActualTypeArguments()[0].getTypeName();
return initClassTypeWithDefaultValue(makeParameterizedType(typeName), makeClass(typeName),
processCount, methodPrarmGenericTypeAndNamesMap);
} else if (BigDecimal.class.isAssignableFrom(classType)) {
return 0;
} else if (BigInteger.class.isAssignableFrom(classType)) {
return 0;
}
return null;
}