public static Object initClassTypeWithDefaultValueNoProceeField()

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;
    }