From 32f3fccaf7bbe3c984cd05b53db4212b6f50a0e6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 13 Dec 2018 14:32:17 +0100 Subject: [PATCH] IG: don't suggest to replace if with switch on non-constant (IDEA-204135) --- .../com/siyeh/ig/psiutils/SwitchUtils.java | 10 +++++++- .../migration/if_switch/IfCanBeSwitch.java | 24 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java index d268d54fa72a..e5498ced7aed 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java @@ -230,7 +230,15 @@ public class SwitchUtils { } final PsiExpression left = check.getLeft(); final PsiExpression right = check.getRight(); - return PsiUtil.isConstantExpression(left) ? right : left; + if (PsiUtil.isConstantExpression(left)) { + return right; + } + else if (PsiUtil.isConstantExpression(right)) { + return left; + } + else { + return null; + } } private static boolean canBeCaseLabel(PsiExpression expression, LanguageLevel languageLevel) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/if_switch/IfCanBeSwitch.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/if_switch/IfCanBeSwitch.java index e189a0327cb6..5ccb5a98d493 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/if_switch/IfCanBeSwitch.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/if_switch/IfCanBeSwitch.java @@ -92,4 +92,28 @@ class IfCanBeSwitch { System.out.println("-"); } } +} +class MyText implements Comparable { + + private String name; + + String getSuperType() { + return name.startsWith("a") ? "b" : "c"; + } + + @Override + public int compareTo(MyText o) { + String superType = getSuperType(); + if (superType.equals(o.getSuperType())) { + return this.name.compareTo(o.name); + } else if (superType.equals("a")) { + return -1; + } else if (superType.equals("b")) { + return 1; + } else if (superType.equals("c")) { + return o.getSuperType().equals("a") ? 1 : -1; + } else { + return 0; + } + } } \ No newline at end of file