(int)Object cast conversion in java 1.7 supported (IDEA-90906; IDEA-66803)

This commit is contained in:
Anna Kozlova
2012-09-11 10:39:16 +04:00
parent 9a98e4afb8
commit d2ebef63e8
2 changed files with 19 additions and 4 deletions
@@ -111,6 +111,15 @@ public class TypeConversionUtil {
return boxedType != null && areTypesConvertible(boxedType, toType);
}
if (!fromIsPrimitive) {
if (fromType instanceof PsiClassType && ((PsiClassType)fromType).getLanguageLevel().isAtLeast(LanguageLevel.JDK_1_7)) {
final PsiClassType classType = (PsiClassType)fromType;
final PsiClass psiClass = classType.resolve();
if (psiClass == null || psiClass instanceof PsiTypeParameter) return false;
final PsiClassType boxedType = ((PsiPrimitiveType)toType).getBoxedType(psiClass.getManager(), psiClass.getResolveScope());
if (boxedType != null) {
return isAssignable(fromType, boxedType);
}
}
return fromTypeRank == toTypeRank ||
fromTypeRank <= MAX_NUMERIC_RANK && toTypeRank <= MAX_NUMERIC_RANK && fromTypeRank < toTypeRank;
}
@@ -71,14 +71,20 @@ class C {
MethodHandle mh1 = MethodHandles.convertArguments(mh0, MethodType.methodType(Integer.class, String.class));
System.out.println((Integer) mh1.invokeExact("daddy"));
}
void supported() {
Object o = 42;
int i = (int) o;
String s = "";
int i1 = <error descr="Inconvertible types; cannot cast 'java.lang.String' to 'int'">(int) s</error>;
System.out.println(i);
m((int) o);
}
void unsupported() {
Object o = 42;
int i = <error descr="Inconvertible types; cannot cast 'java.lang.Object' to 'int'">(int) o</error>;
System.out.println(i);
m(<error descr="Inconvertible types; cannot cast 'java.lang.Object' to 'int'">(int) o</error>);
if (<error descr="Inconvertible types; cannot cast 'java.lang.Object' to 'int'">o instanceof int</error>) {
i = (Integer) o;
int i = (Integer) o;
System.out.println(i);
}
}