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-20 19:53:21 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2018-08-20 19:53:21 +0200
commit964778bb48e3bbc63f5e9b174e7af371aa1f05ae (patch)
treef59d2e6cd2c435e2df4ceb3fc97568a30c96a14e /org.jacoco.core/src/org/jacoco/core/internal/analysis
parent6bbb012ddb61ee25c67c1ec166535f84c2f7d085 (diff)
downloadjacoco-964778bb48e3bbc63f5e9b174e7af371aa1f05ae.tar.gz
StringSwitchEcjFilter and KotlinWhenStringFilter should use correct VarInsnNode (#746)
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/KotlinWhenStringFilter.java8
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java7
2 files changed, 10 insertions, 5 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
index 861c7bfb..b8694c24 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
@@ -21,6 +21,7 @@ import org.objectweb.asm.tree.LabelNode;
import org.objectweb.asm.tree.LookupSwitchInsnNode;
import org.objectweb.asm.tree.MethodNode;
import org.objectweb.asm.tree.TableSwitchInsnNode;
+import org.objectweb.asm.tree.VarInsnNode;
/**
* Filters bytecode that Kotlin compiler generates for <code>when</code>
@@ -41,15 +42,16 @@ public final class KotlinWhenStringFilter implements IFilter {
public void match(final AbstractInsnNode start,
final IFilterOutput output) {
+ if (Opcodes.ALOAD != start.getOpcode()) {
+ return;
+ }
cursor = start;
-
- nextIsVar(Opcodes.ASTORE, "s");
- nextIsVar(Opcodes.ALOAD, "s");
nextIsInvokeVirtual("java/lang/String", "hashCode");
nextIsSwitch();
if (cursor == null) {
return;
}
+ vars.put("s", (VarInsnNode) start);
final AbstractInsnNode s = cursor;
final int hashCodes;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java
index d4be1819..6c52d3b9 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java
@@ -21,6 +21,7 @@ import org.objectweb.asm.tree.LabelNode;
import org.objectweb.asm.tree.LookupSwitchInsnNode;
import org.objectweb.asm.tree.MethodNode;
import org.objectweb.asm.tree.TableSwitchInsnNode;
+import org.objectweb.asm.tree.VarInsnNode;
/**
* Filters code that is generated by ECJ for a <code>switch</code> statement
@@ -41,14 +42,16 @@ public final class StringSwitchEcjFilter implements IFilter {
public void match(final AbstractInsnNode start,
final IFilterOutput output) {
+ if (Opcodes.ASTORE != start.getOpcode()) {
+ return;
+ }
cursor = start;
-
- nextIsVar(Opcodes.ASTORE, "s");
nextIsInvokeVirtual("java/lang/String", "hashCode");
nextIsSwitch();
if (cursor == null) {
return;
}
+ vars.put("s", (VarInsnNode) start);
final AbstractInsnNode s = cursor;
final int hashCodes;