aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
authorEvgeny Mandrikov <Godin@users.noreply.github.com>2018-08-13 22:23:21 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2018-08-13 22:23:21 +0200
commitaa778680a3adc19eb59a1c96b570d9d1fe4a8145 (patch)
tree6369982de88595145ae20a317a9406c0b11493ce /org.jacoco.core/src/org/jacoco/core/internal/analysis
parent90af0853aed1cf9290acb81ed0cde1699cc00718 (diff)
downloadjacoco-aa778680a3adc19eb59a1c96b570d9d1fe4a8145.tar.gz
Filter switch on String that javac compiles into lookupswitch (#730)
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis')
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java19
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java3
2 files changed, 21 insertions, 1 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
index 9e07153b..9b01e777 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
@@ -111,6 +111,25 @@ abstract class AbstractMatcher {
}
/**
+ * Moves {@link #cursor} to next instruction if it is
+ * <code>TABLESWITCH</code> or <code>LOOKUPSWITCH</code>, otherwise sets it
+ * to <code>null</code>.
+ */
+ final void nextIsSwitch() {
+ next();
+ if (cursor == null) {
+ return;
+ }
+ switch (cursor.getOpcode()) {
+ case Opcodes.TABLESWITCH:
+ case Opcodes.LOOKUPSWITCH:
+ return;
+ default:
+ cursor = null;
+ }
+ }
+
+ /**
* Moves {@link #cursor} to next instruction if it has given opcode,
* otherwise sets it to <code>null</code>.
*/
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 c61bc752..72b5f536 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
@@ -91,7 +91,8 @@ public final class StringSwitchJavacFilter implements IFilter {
}
}
nextIsVar(Opcodes.ILOAD, "c");
- nextIs(Opcodes.TABLESWITCH);
+ // Can be TABLESWITCH or LOOKUPSWITCH depending on number of cases
+ nextIsSwitch();
return cursor != null;
}
}