From aa778680a3adc19eb59a1c96b570d9d1fe4a8145 Mon Sep 17 00:00:00 2001 From: Evgeny Mandrikov Date: Mon, 13 Aug 2018 22:23:21 +0200 Subject: Filter switch on String that javac compiles into lookupswitch (#730) --- .../internal/analysis/filter/AbstractMatcher.java | 19 +++++++++++++++++++ .../analysis/filter/StringSwitchJavacFilter.java | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis') 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 @@ -110,6 +110,25 @@ abstract class AbstractMatcher { } } + /** + * Moves {@link #cursor} to next instruction if it is + * TABLESWITCH or LOOKUPSWITCH, otherwise sets it + * to null. + */ + 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 null. 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; } } -- cgit v1.2.3