string comparison: evaluate based on equals comparison (IDEA-160823)

This commit is contained in:
Anna.Kozlova
2016-12-28 18:49:05 +01:00
parent 68ea1ecfe8
commit 1cf721e0ce
3 changed files with 49 additions and 2 deletions
@@ -247,7 +247,7 @@ class ConstantExpressionVisitor extends JavaElementVisitor implements PsiConstan
value = Boolean.valueOf(((Number)lOperandValue).doubleValue() == ((Number)rOperandValue).doubleValue());
}
else if (lOperandValue instanceof String && rOperandValue instanceof String) {
value = Boolean.valueOf(lOperandValue == rOperandValue);
value = Boolean.valueOf(lOperandValue.equals(rOperandValue));
}
else if (lOperandValue instanceof Boolean && rOperandValue instanceof Boolean) {
value = Boolean.valueOf(((Boolean)lOperandValue).booleanValue() == ((Boolean)rOperandValue).booleanValue());
@@ -260,7 +260,7 @@ class ConstantExpressionVisitor extends JavaElementVisitor implements PsiConstan
value = Boolean.valueOf(((Number)lOperandValue).doubleValue() != ((Number)rOperandValue).doubleValue());
}
else if (lOperandValue instanceof String && rOperandValue instanceof String) {
value = Boolean.valueOf(lOperandValue != rOperandValue);
value = Boolean.valueOf(!lOperandValue.equals(rOperandValue));
}
else if (lOperandValue instanceof Boolean && rOperandValue instanceof Boolean) {
value = Boolean.valueOf(((Boolean)lOperandValue).booleanValue() != ((Boolean)rOperandValue).booleanValue());
@@ -0,0 +1,43 @@
class Bar {
public static final String T = "";
void m0() {
while (T == "") {
f();
}
<error descr="Unreachable statement">f();</error>
}
void m() {
while (T == "a") {
<error descr="Unreachable statement">f();</error>
}
}
void m01() {
while (T != "") {
<error descr="Unreachable statement">f();</error>
}
}
void m1() {
while (T != "a") {
f();
}
<error descr="Unreachable statement">f();</error>
}
void m2() {
while (T != T) {
<error descr="Unreachable statement">f();</error>
}
}
void m3() {
while (T == T) {}
<error descr="Unreachable statement">f();</error>
}
private void f() {}
}
@@ -94,4 +94,8 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
public void testStaticOnDemandImportResolvesToClass() throws Exception {
doTest(false, false);
}
public void testReachableWhileBodyDueToConstantStringComparison() throws Exception {
doTest(false, false);
}
}