From f9be4584e514715c2ca67047799925cf0a3c3168 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 24 Jul 2019 10:35:21 +0700 Subject: [PATCH] applyGetClassRelation: minor simplification; test for new object (IDEA-CR-50564) GitOrigin-RevId: 439a327d7276a0d28e3ebc41f01646a828305022 --- .../codeInspection/dataFlow/DfaMemoryStateImpl.java | 13 +++++-------- .../inspection/dataFlow/fixture/GetClass.java | 5 +++++ 2 files changed, 10 insertions(+), 8 deletions(-) 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) {}