From 817a3ad1d9f11b90c270843587162ac9734e994e Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 18 Apr 2012 19:27:41 +0200 Subject: [PATCH] fix generated equals wrongly highlighted by dfa inspection --- .../dataFlow/DfaMemoryStateImpl.java | 3 +-- .../dataFlow/fixture/GeneratedEquals.java | 20 +++++++++++++++++++ .../DataFlowInspectionFixtureTest.java | 2 ++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index 1c64387baeb2..2a255d292d31 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -600,8 +600,7 @@ public class DfaMemoryStateImpl implements DfaMemoryState { DfaVariableValue dfaVar = (DfaVariableValue)dfaLeft; DfaTypeValue type = myFactory.getTypeFactory().create(((DfaNotNullValue)dfaRight).getType()); if (isNegated) { - return varState.addNotInstanceofValue(type) || - applyCondition(myFactory.getRelationFactory().create(dfaVar, DfaUnknownValue.getInstance(), JavaTokenType.EQEQ, false)); + return applyCondition(myFactory.getRelationFactory().create(dfaVar, DfaUnknownValue.getInstance(), JavaTokenType.EQEQ, false)); } return applyCondition(compareToNull(dfaVar, false)) && varState.setInstanceofValue(type); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java b/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java new file mode 100644 index 000000000000..225b452948e1 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/GeneratedEquals.java @@ -0,0 +1,20 @@ +public class Bar { + int foo; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Bar)) return false; + + Bar bar = (Bar) o; + + if (foo != bar.foo) return false; + + return true; + } + + @Override + public int hashCode() { + return foo; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index 80a169260384..77bd8e03e1f0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -58,6 +58,8 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testTryCatchInForNotComplex() throws Throwable { doTest(); } public void testFieldChangedBetweenSynchronizedBlocks() throws Throwable { doTest(); } + public void testGeneratedEquals() throws Throwable { doTest(); } + public void testIDEA84489() throws Throwable { doTest(); } }