in drools-mvel/src/main/java/org/drools/mvel/ASMConditionEvaluatorJitter.java [1155:1356]
private Class<?> findCommonClass(Class<?> class1, Class<?> class2, boolean canBePrimitive) {
if (class1.isAssignableFrom(class2)) {
return class1;
}
if (class1 == boolean.class && class2 == Boolean.class) {
return canBePrimitive ? boolean.class : Boolean.class;
}
if (class1 == char.class && class2 == Character.class) {
return canBePrimitive ? char.class : Character.class;
}
if (class1 == byte.class && class2 == Byte.class) {
return canBePrimitive ? byte.class : Byte.class;
}
if (class1 == short.class && class2 == Short.class) {
return canBePrimitive ? short.class : Short.class;
}
if (class1 == Number.class && class2.isPrimitive()) {
return Double.class;
}
if (class1 == int.class || class1 == short.class || class1 == byte.class) {
if (class2 == Integer.class) {
return canBePrimitive ? int.class : Integer.class;
}
if (class2 == long.class) {
return long.class;
}
if (class2 == Long.class) {
return canBePrimitive ? long.class : Long.class;
}
if (class2 == float.class) {
return float.class;
}
if (class2 == Float.class) {
return canBePrimitive ? float.class : Float.class;
}
if (class2 == double.class) {
return double.class;
}
if (class2 == Double.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == BigInteger.class) {
return BigInteger.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == long.class) {
if (class2 == int.class) {
return long.class;
}
if (class2 == Integer.class) {
return canBePrimitive ? long.class : Long.class;
}
if (class2 == Long.class) {
return canBePrimitive ? long.class : Long.class;
}
if (class2 == float.class) {
return double.class;
}
if (class2 == Float.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == double.class) {
return double.class;
}
if (class2 == Double.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == BigInteger.class) {
return BigInteger.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == float.class) {
if (class2 == int.class) {
return float.class;
}
if (class2 == Integer.class) {
return canBePrimitive ? float.class : Float.class;
}
if (class2 == long.class) {
return double.class;
}
if (class2 == Long.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == Float.class) {
return canBePrimitive ? float.class : Float.class;
}
if (class2 == double.class) {
return double.class;
}
if (class2 == Double.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == BigInteger.class) {
return BigDecimal.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == double.class) {
if (class2 == int.class) {
return float.class;
}
if (class2 == Integer.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == long.class) {
return double.class;
}
if (class2 == Long.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == float.class) {
return double.class;
}
if (class2 == Float.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == Double.class) {
return canBePrimitive ? double.class : Double.class;
}
if (class2 == BigInteger.class) {
return BigDecimal.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == Integer.class) {
if (class2 == Long.class) {
return Long.class;
}
if (class2 == Float.class) {
return Float.class;
}
if (class2 == Double.class) {
return Double.class;
}
if (class2 == BigInteger.class) {
return BigInteger.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == Long.class) {
if (class2 == Float.class) {
return Double.class;
}
if (class2 == Double.class) {
return Double.class;
}
if (class2 == BigInteger.class) {
return BigInteger.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == Float.class) {
if (class2 == Double.class) {
return Double.class;
}
if (class2 == BigInteger.class) {
return BigDecimal.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == Double.class) {
if (class2 == BigInteger.class) {
return BigDecimal.class;
}
if (class2 == BigDecimal.class) {
return BigDecimal.class;
}
}
if (class1 == BigInteger.class && class2 == BigDecimal.class) {
return BigDecimal.class;
}
return null;
}