From af20bc97d07c09a9ab2497bd4b837ff029323858 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 17 May 2017 15:02:24 +0700 Subject: [PATCH] DFA: ignore ranges for float/double (was introduced during DfaFactType merge) --- .../dataFlow/DfaMemoryStateImpl.java | 23 ++++++++----------- .../dataFlow/fixture/LongRangeBasics.java | 6 +++++ 2 files changed, 16 insertions(+), 13 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 b76718c8bf96..d7afd6ec7941 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 @@ -720,20 +720,17 @@ public class DfaMemoryStateImpl implements DfaMemoryState { if (dfaLeft instanceof DfaUnknownValue || dfaRight instanceof DfaUnknownValue) return true; RelationType relationType = dfaRelation.getRelation(); - if (dfaLeft instanceof DfaVariableValue) { - LongRangeSet right = getValueFact(DfaFactType.RANGE, dfaRight); - if (right != null) { - if (!applyFact((DfaVariableValue)dfaLeft, DfaFactType.RANGE, right.fromRelation(relationType))) { - return false; - } + LongRangeSet left = getValueFact(DfaFactType.RANGE, dfaLeft); + LongRangeSet right = getValueFact(DfaFactType.RANGE, dfaRight); + + if (left != null && right != null) { + if (dfaLeft instanceof DfaVariableValue && + !applyFact((DfaVariableValue)dfaLeft, DfaFactType.RANGE, right.fromRelation(relationType))) { + return false; } - } - if (dfaRight instanceof DfaVariableValue) { - LongRangeSet left = getValueFact(DfaFactType.RANGE, dfaLeft); - if (left != null) { - if (!applyFact((DfaVariableValue)dfaRight, DfaFactType.RANGE, left.fromRelation(relationType.getFlipped()))) { - return false; - } + if (dfaRight instanceof DfaVariableValue && + !applyFact((DfaVariableValue)dfaRight, DfaFactType.RANGE, left.fromRelation(relationType.getFlipped()))) { + return false; } } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeBasics.java b/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeBasics.java index b4008421d341..7260e8c60124 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeBasics.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeBasics.java @@ -166,6 +166,12 @@ public class LongRangeBasics { } } + void testDouble(double d) { + if(d > 0 && d < 1) { + System.out.println("ok"); + } + } + private int getState() { return (int)(Math.random() * 100); }