Do not assume that Object is assignable from any class

Class could be a primitive
Fixes IDEA-232014 False positive `Constant conditions & exceptions` inspection for `Class#isAssignableFrom(Class)`

GitOrigin-RevId: 4db7cfa10a0d2b8a2476f434db82d04d7a62cd38
This commit is contained in:
Tagir Valeev
2020-02-04 17:07:43 +07:00
committed by intellij-monorepo-bot
parent b91599f50f
commit 9be22ca7e7
2 changed files with 10 additions and 1 deletions

View File

@@ -939,7 +939,7 @@ public class StandardInstructionVisitor extends InstructionVisitor {
ArrayList<DfaInstructionState> states = new ArrayList<>(2);
DfType leftType = memState.getDfType(dfaLeft);
if (condition == DfaCondition.getUnknown()) {
if (dfaLeft instanceof DfaTypeValue && dfaRight instanceof DfaTypeValue) {
if (leftType != TOP && dfaLeft instanceof DfaTypeValue && dfaRight instanceof DfaTypeValue) {
TypeConstraint left = TypeConstraint.fromDfType(leftType);
TypeConstraint right = TypeConstraint.fromDfType(dfaRight.getDfType());
useful = !right.isSuperConstraintOf(left);

View File

@@ -3,6 +3,15 @@ import java.util.*;
class GetClass {
native void unknown();
public static void testIntClass() {
Class<?> cls = someIntClass();
System.out.println(Object.class.isAssignableFrom(cls));
}
public static Class<?> someIntClass() {
return int.class;
}
void testStability(Object obj, Class<?> c) {
if (obj.getClass().equals(c)) {
unknown();