protected Number allocateNumber()

in src/main/java/org/apache/commons/jxpath/util/BasicTypeConverter.java [354:402]


    protected Number allocateNumber(Class type, final double value) {
        type = TypeUtils.wrapPrimitive(type);
        if (type == Byte.class) {
            return Byte.valueOf((byte) value);
        }
        if (type == Short.class) {
            return Short.valueOf((short) value);
        }
        if (type == Integer.class) {
            return Integer.valueOf((int) value);
        }
        if (type == Long.class) {
            return Long.valueOf((long) value);
        }
        if (type == Float.class) {
            return Float.valueOf((float) value);
        }
        if (type == Double.class) {
            return Double.valueOf(value);
        }
        if (type == BigInteger.class) {
            return BigInteger.valueOf((long) value);
        }
        if (type == BigDecimal.class) {
            // TODO ? https://pmd.sourceforge.io/pmd-6.50.0/pmd_rules_java_errorprone.html#avoiddecimalliteralsinbigdecimalconstructor
            return new BigDecimal(value); // NOPMD
        }
        final String classname = type.getName();
        Class initialValueType = null;
        if ("java.util.concurrent.atomic.AtomicInteger".equals(classname)) {
            initialValueType = int.class;
        }
        if ("java.util.concurrent.atomic.AtomicLong".equals(classname)) {
            initialValueType = long.class;
        }
        if (initialValueType != null) {
            try {
                return (Number) type.getConstructor(
                        new Class[] { initialValueType })
                        .newInstance(
                                allocateNumber(initialValueType,
                                        value));
            }
            catch (final Exception e) {
                throw new JXPathTypeConversionException(classname, e);
            }
        }
        return null;
    }