aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--org.jacoco.core.test/src-java7/org/jacoco/core/test/filter/targets/StringSwitch.java8
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java2
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();