diff options
-rw-r--r-- | org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java | 8 | ||||
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java b/org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java index 623c80ec..beaa9797 100644 --- a/org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java +++ b/org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java @@ -18,8 +18,8 @@ import static org.jacoco.core.test.validation.targets.Stubs.nop; */ public class StringSwitch { - private static void covered(String s) { - switch (s) { // $line-covered.switch$ + private static void covered(Object s) { + switch (String.valueOf(s)) { // $line-covered.switch$ case "a": nop("case a"); // $line-covered.case1$ break; @@ -35,8 +35,8 @@ public class StringSwitch { } } - private static void notCovered(String s) { - switch (s) { // $line-notCovered$ + private static void notCovered(Object s) { + switch (String.valueOf(s)) { // $line-notCovered$ case "a": nop("case a"); break; diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java index 2824fce9..3797560b 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java @@ -65,6 +65,8 @@ public final class StringSwitchJavacFilter implements IFilter { return false; } nextIsVar(Opcodes.ISTORE, "c"); + // Even if expression is not a variable, its result will be + // precomputed before the previous two instructions: nextIsVar(Opcodes.ALOAD, "s"); nextIsInvokeVirtual("java/lang/String", "hashCode"); next(); |