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