@Override public boolean areEqualityCompatible(Class<?> c1, Class<?> c2) { if (c1 == NullType.class || c2 == NullType.class) { return true; } if (c1 == String.class || c2 == String.class) { return true; } Class boxed1 = convertFromPrimitiveType(c1); Class boxed2 = convertFromPrimitiveType(c2); if (boxed1.isAssignableFrom(boxed2) || boxed2.isAssignableFrom(boxed1)) { return true; } if (Number.class.isAssignableFrom(boxed1) && Number.class.isAssignableFrom(boxed2)) { return true; } return !Modifier.isFinal(c1.getModifiers()) && !Modifier.isFinal(c2.getModifiers()); }
protected final void castFromPrimitive(Class<?> clazz) { Class<?> boxedType = convertFromPrimitiveType(clazz); invokeStatic(boxedType, "valueOf", boxedType, clazz); }
result = class1; } else if (class1 == NullType.class) { result = convertFromPrimitiveType(class2); } else if (class2 == NullType.class) { result = convertFromPrimitiveType(class1); } else if (class1 == Object.class) { result = convertFromPrimitiveType(class2); if (Number.class.isAssignableFrom(result) && !result.getSimpleName().startsWith("Big")) { result = Double.class; result = convertFromPrimitiveType(class1); if (Number.class.isAssignableFrom(result) && !result.getSimpleName().startsWith("Big")) { result = Double.class; result = convertFromPrimitiveType(class2); } else if (class2 == String.class) { result = convertFromPrimitiveType(class1);
public String getBoxedTypeName() { if (cachedBoxedTypeName == null) { // we assume that null extractor errors are reported else where cachedBoxedTypeName = getExtractor() != null ? canonicalName(convertFromPrimitiveType(getExtractor().getExtractToClass())) : "java.lang.Object"; } return cachedBoxedTypeName; }
private void jitInstanceof(SingleCondition singleCondition) { Class<?> value = (Class<?>)((FixedExpression)singleCondition.getRight()).getValue(); String internalClassName = internalName(value); Expression left = singleCondition.getLeft(); Class<?> leftType = isDeclarationExpression(left) ? convertFromPrimitiveType(left.getType()) : left.getType(); jitExpression(left, leftType); mv.visitTypeInsn(INSTANCEOF, internalClassName); }
private void jitObjectBinary(SingleCondition singleCondition, Expression left, Expression right, Class<?> type) { Class<?> leftType = isDeclarationExpression(left) ? convertFromPrimitiveType(left.getType()) : left.getType(); Class<?> rightType = isDeclarationExpression(right) ? convertFromPrimitiveType(right.getType()) : right.getType();