diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index a2caee180af3..f8e45cea0a42 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -1124,15 +1124,12 @@ public class DfaMemoryStateImpl implements DfaMemoryState { DfaPsiType dfaType = myFactory.createDfaType(value); TypeConstraint constraint = TypeConstraint.exact(dfaType); PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(value); - if (!negated) { - if (psiClass != null && (psiClass.isInterface() || psiClass.hasModifierProperty(PsiModifier.ABSTRACT))) { - // getClass() result cannot be an interface or an abstract class - return ThreeState.NO; - } - return ThreeState.fromBoolean(applyFact(qualifier, DfaFactType.TYPE_CONSTRAINT, constraint)); - } if (psiClass != null && (psiClass.isInterface() || psiClass.hasModifierProperty(PsiModifier.ABSTRACT))) { - return ThreeState.YES; + // getClass() result cannot be an interface or an abstract class + return ThreeState.fromBoolean(negated); + } + if (!negated) { + return ThreeState.fromBoolean(applyFact(qualifier, DfaFactType.TYPE_CONSTRAINT, constraint)); } TypeConstraint existingConstraint = getValueFact(qualifier, DfaFactType.TYPE_CONSTRAINT); if (existingConstraint != null && existingConstraint.isExact()) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/GetClass.java b/java/java-tests/testData/inspection/dataFlow/fixture/GetClass.java index 6753139d595b..c0e8aabf3fa8 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/GetClass.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/GetClass.java @@ -20,6 +20,11 @@ class GetClass { } + void testNew() { + Object x = new HashSet(); + if (x.getClass() == HashSet.class) {} + } + void testInstanceOfInterop(Object obj) { if (obj instanceof CharSequence) { if (obj.getClass() == Integer.class) {}