aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Mandrikov <138671+Godin@users.noreply.github.com>2019-03-14 13:54:13 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2019-03-14 13:54:13 +0100
commit795c8f9e3b2e7e7abe3f4342bbd4a1dd31530325 (patch)
tree04635a92dadc4309ede496204eec963249e7b5e0
parent771812b48fe8542b89ea66e82ca4b391a130c2b2 (diff)
downloadplatform_external_jacoco-795c8f9e3b2e7e7abe3f4342bbd4a1dd31530325.tar.gz
platform_external_jacoco-795c8f9e3b2e7e7abe3f4342bbd4a1dd31530325.tar.bz2
platform_external_jacoco-795c8f9e3b2e7e7abe3f4342bbd4a1dd31530325.zip
`nextIsInvokeStatic` and `nextIsInvokeVirtual` should check method descriptor (#857)
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java72
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java2
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java44
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java16
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java7
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java4
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java2
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java6
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java6
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java6
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java3
17 files changed, 62 insertions, 125 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
index 56199bf5..f659632d 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
@@ -137,89 +137,41 @@ public class AbstractMatcherTest {
}
@Test
- public void nextIsInvokeStatic() {
- m.visitInsn(Opcodes.NOP);
- m.visitMethodInsn(Opcodes.INVOKESTATIC, "owner", "name", "()V", false);
-
- // should set cursor to null when owner mismatch
- matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeStatic("another_owner", "name");
- assertNull(matcher.cursor);
-
- // should set cursor to null when name mismatch
- matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeStatic("owner", "another_name");
- assertNull(matcher.cursor);
-
- // should set cursor to next instruction when match
- matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeStatic("owner", "name");
- assertSame(m.instructions.getLast(), matcher.cursor);
-
- // should not do anything when cursor is null
- matcher.cursor = null;
- matcher.nextIsInvokeStatic("owner", "name");
- }
-
- @Test
- public void nextIsInvokeVirtual() {
+ public void nextIsInvoke() {
m.visitInsn(Opcodes.NOP);
m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "owner", "name", "()V", false);
- // should set cursor to null when owner mismatch
+ // should set cursor to null when opcode mismatch
matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeVirtual("another_owner", "name");
+ matcher.nextIsInvoke(Opcodes.INVOKESTATIC, "owner", "name", "()V");
assertNull(matcher.cursor);
- // should set cursor to null when name mismatch
+ // should set cursor to null when owner mismatch
matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeVirtual("owner", "another_name");
+ matcher.nextIsInvoke(Opcodes.INVOKEVIRTUAL, "another_owner", "name",
+ "()V");
assertNull(matcher.cursor);
- // should set cursor to next instruction when match
- matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeVirtual("owner", "name");
- assertSame(m.instructions.getLast(), matcher.cursor);
-
- // should not do anything when cursor is null
- matcher.cursor = null;
- matcher.nextIsInvokeVirtual("owner", "name");
- }
-
- @Test
- public void nextIsInvokeSuper() {
- m.visitInsn(Opcodes.NOP);
- m.visitMethodInsn(Opcodes.INVOKESPECIAL, "owner", "not_init", "()V",
- false);
-
// should set cursor to null when name mismatch
matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeSuper("owner", "()V");
- assertNull(matcher.cursor);
-
- m.instructions.clear();
- m.visitInsn(Opcodes.NOP);
- m.visitMethodInsn(Opcodes.INVOKESPECIAL, "owner", "<init>", "()V",
- false);
-
- // should set cursor to null when owner mismatch
- matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeSuper("another_owner", "()V");
+ matcher.nextIsInvoke(Opcodes.INVOKEVIRTUAL, "owner", "another_name",
+ "()V");
assertNull(matcher.cursor);
// should set cursor to null when descriptor mismatch
matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeSuper("owner", "(I)V");
+ matcher.nextIsInvoke(Opcodes.INVOKEVIRTUAL, "owner", "name",
+ "(Lanother_descriptor;)V");
assertNull(matcher.cursor);
// should set cursor to next instruction when match
matcher.cursor = m.instructions.getFirst();
- matcher.nextIsInvokeSuper("owner", "()V");
+ matcher.nextIsInvoke(Opcodes.INVOKEVIRTUAL, "owner", "name", "()V");
assertSame(m.instructions.getLast(), matcher.cursor);
// should not do anything when cursor is null
matcher.cursor = null;
- matcher.nextIsInvokeSuper("owner", "()V");
+ matcher.nextIsInvoke(Opcodes.INVOKEVIRTUAL, "owner", "name", "()V");
}
@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
index b5b06743..127ae309 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
@@ -53,7 +53,7 @@ public class KotlinCoroutineFilterTest extends FilterTestBase {
{
m.visitVarInsn(Opcodes.ALOAD, 1);
m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/ResultKt",
- "throwOnFailure", "", false);
+ "throwOnFailure", "(Ljava/lang/Object;)V", false);
range1.toInclusive = m.instructions.getLast();
}
@@ -83,7 +83,7 @@ public class KotlinCoroutineFilterTest extends FilterTestBase {
{
m.visitVarInsn(Opcodes.ALOAD, 1);
m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/ResultKt",
- "throwOnFailure", "", false);
+ "throwOnFailure", "(Ljava/lang/Object;)V", false);
}
m.visitVarInsn(Opcodes.ALOAD, 1);
range2.toInclusive = m.instructions.getLast();
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
index 5b5f3285..c9e34bab 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
@@ -47,7 +47,7 @@ public class KotlinLateinitFilterTest extends FilterTestBase {
m.visitMethodInsn(Opcodes.INVOKESTATIC,
"kotlin/jvm/internal/Intrinsics",
"throwUninitializedPropertyAccessException",
- "Ljava/lang/String;", false);
+ "(Ljava/lang/String;)V", false);
final AbstractInsnNode expectedTo = m.instructions.getLast();
m.visitLabel(l2);
m.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
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 c27c4e92..38860a83 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
@@ -57,49 +57,19 @@ abstract class AbstractMatcher {
}
/**
- * Moves {@link #cursor} to next instruction if it is
- * <code>INVOKESPECIAL &lt;init&gt;</code> with given owner and descriptor,
- * otherwise sets it to <code>null</code>.
- */
- final void nextIsInvokeSuper(final String owner, final String desc) {
- nextIs(Opcodes.INVOKESPECIAL);
- MethodInsnNode m = (MethodInsnNode) cursor;
- if (m != null && owner.equals(m.owner) && "<init>".equals(m.name)
- && desc.equals(m.desc)) {
- return;
- }
- cursor = null;
- }
-
- /**
- * Moves {@link #cursor} to next instruction if it is
- * <code>INVOKEVIRTUAL</code> with given owner and name, otherwise sets it
- * to <code>null</code>.
- */
- final void nextIsInvokeVirtual(final String owner, final String name) {
- nextIs(Opcodes.INVOKEVIRTUAL);
- if (cursor == null) {
- return;
- }
- final MethodInsnNode m = (MethodInsnNode) cursor;
- if (owner.equals(m.owner) && name.equals(m.name)) {
- return;
- }
- cursor = null;
- }
-
- /**
- * Moves {@link #cursor} to next instruction if it is
- * <code>INVOKESTATIC</code> with given owner and name, otherwise sets it to
+ * Moves {@link #cursor} to next instruction if it is {@link MethodInsnNode}
+ * with given opcode, owner, name and descriptor, otherwise sets it to
* <code>null</code>.
*/
- final void nextIsInvokeStatic(final String owner, final String name) {
- nextIs(Opcodes.INVOKESTATIC);
+ final void nextIsInvoke(final int opcode, final String owner,
+ final String name, final String descriptor) {
+ nextIs(opcode);
if (cursor == null) {
return;
}
final MethodInsnNode m = (MethodInsnNode) cursor;
- if (owner.equals(m.owner) && name.equals(m.name)) {
+ if (owner.equals(m.owner) && name.equals(m.name)
+ && descriptor.equals(m.desc)) {
return;
}
cursor = null;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
index 8b7096a9..4a39d1e8 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
@@ -51,7 +51,8 @@ public final class EnumEmptyConstructorFilter implements IFilter {
firstIsALoad0(methodNode);
nextIs(Opcodes.ALOAD);
nextIs(Opcodes.ILOAD);
- nextIsInvokeSuper(ENUM_TYPE, CONSTRUCTOR_DESC);
+ nextIsInvoke(Opcodes.INVOKESPECIAL, ENUM_TYPE, CONSTRUCTOR_NAME,
+ CONSTRUCTOR_DESC);
nextIs(Opcodes.RETURN);
return cursor != null;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
index 2e381325..66d450a3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
@@ -49,16 +49,18 @@ public final class KotlinCoroutineFilter implements IFilter {
private void match(final MethodNode methodNode,
final IFilterOutput output) {
cursor = methodNode.instructions.getFirst();
- nextIsInvokeStatic("kotlin/coroutines/intrinsics/IntrinsicsKt",
- "getCOROUTINE_SUSPENDED");
+ nextIsInvoke(Opcodes.INVOKESTATIC,
+ "kotlin/coroutines/intrinsics/IntrinsicsKt",
+ "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;");
if (cursor == null) {
cursor = skipNonOpcodes(methodNode.instructions.getFirst());
nextIsCreateStateInstance();
- nextIsInvokeStatic("kotlin/coroutines/intrinsics/IntrinsicsKt",
- "getCOROUTINE_SUSPENDED");
+ nextIsInvoke(Opcodes.INVOKESTATIC,
+ "kotlin/coroutines/intrinsics/IntrinsicsKt",
+ "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;");
}
nextIsVar(Opcodes.ASTORE, "COROUTINE_SUSPENDED");
@@ -127,7 +129,8 @@ public final class KotlinCoroutineFilter implements IFilter {
"call to 'resume' before 'invoke' with coroutine")) {
return;
}
- nextIsInvokeSuper("java/lang/IllegalStateException",
+ nextIsInvoke(Opcodes.INVOKESPECIAL,
+ "java/lang/IllegalStateException", "<init>",
"(Ljava/lang/String;)V");
nextIs(Opcodes.ATHROW);
if (cursor == null) {
@@ -142,7 +145,8 @@ public final class KotlinCoroutineFilter implements IFilter {
private void nextIsThrowOnFailure() {
final AbstractInsnNode c = cursor;
- nextIsInvokeStatic("kotlin/ResultKt", "throwOnFailure");
+ nextIsInvoke(Opcodes.INVOKESTATIC, "kotlin/ResultKt",
+ "throwOnFailure", "(Ljava/lang/Object;)V");
if (cursor == null) {
cursor = c;
// Before resolution of
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
index 44805984..12fe926c 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
@@ -21,9 +21,6 @@ import org.objectweb.asm.tree.MethodNode;
*/
public class KotlinLateinitFilter implements IFilter {
- private final static String OWNER = "kotlin/jvm/internal/Intrinsics";
- private final static String NAME = "throwUninitializedPropertyAccessException";
-
public void filter(final MethodNode methodNode,
final IFilterContext context, final IFilterOutput output) {
final Matcher matcher = new Matcher();
@@ -43,7 +40,9 @@ public class KotlinLateinitFilter implements IFilter {
cursor = start;
nextIs(Opcodes.LDC);
- nextIsInvokeStatic(OWNER, NAME);
+ nextIsInvoke(Opcodes.INVOKESTATIC, "kotlin/jvm/internal/Intrinsics",
+ "throwUninitializedPropertyAccessException",
+ "(Ljava/lang/String;)V");
if (cursor != null) {
output.ignore(start, cursor);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
index a5a1b5d5..4dd223a3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
@@ -37,7 +37,8 @@ public final class KotlinNotNullOperatorFilter implements IFilter {
return;
}
cursor = start;
- nextIsInvokeStatic("kotlin/jvm/internal/Intrinsics", "throwNpe");
+ nextIsInvoke(Opcodes.INVOKESTATIC, "kotlin/jvm/internal/Intrinsics",
+ "throwNpe", "()V");
if (cursor == null) {
return;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
index 97b6835f..c298e945 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
@@ -54,8 +54,8 @@ public final class KotlinUnsafeCastOperatorFilter implements IFilter {
.startsWith("null cannot be cast to non-null type"))) {
return;
}
- nextIsInvokeSuper(KOTLIN_TYPE_CAST_EXCEPTION,
- "(Ljava/lang/String;)V");
+ nextIsInvoke(Opcodes.INVOKESPECIAL, KOTLIN_TYPE_CAST_EXCEPTION,
+ "<init>", "(Ljava/lang/String;)V");
nextIs(Opcodes.ATHROW);
if (cursor == null) {
return;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
index 54931669..a229aa04 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
@@ -52,7 +52,7 @@ public final class KotlinWhenFilter implements IFilter {
nextIsType(Opcodes.NEW, EXCEPTION);
nextIs(Opcodes.DUP);
- nextIsInvokeSuper(EXCEPTION, "()V");
+ nextIsInvoke(Opcodes.INVOKESPECIAL, EXCEPTION, "<init>", "()V");
nextIs(Opcodes.ATHROW);
for (AbstractInsnNode i = cursor; i != null; i = i.getPrevious()) {
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 497b4b52..fcccb550 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
@@ -46,7 +46,8 @@ public final class KotlinWhenStringFilter implements IFilter {
return;
}
cursor = start;
- nextIsInvokeVirtual("java/lang/String", "hashCode");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+ "()I");
nextIsSwitch();
if (cursor == null) {
return;
@@ -73,7 +74,8 @@ public final class KotlinWhenStringFilter implements IFilter {
while (true) {
nextIsVar(Opcodes.ALOAD, "s");
nextIs(Opcodes.LDC);
- nextIsInvokeVirtual("java/lang/String", "equals");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String",
+ "equals", "(Ljava/lang/Object;)Z");
// jump to next comparison or default case
nextIs(Opcodes.IFEQ);
final JumpInsnNode jump = (JumpInsnNode) cursor;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
index 5406aa36..236ef712 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
@@ -37,7 +37,8 @@ public final class PrivateEmptyNoArgConstructorFilter implements IFilter {
private boolean match(final MethodNode methodNode,
final String superClassName) {
firstIsALoad0(methodNode);
- nextIsInvokeSuper(superClassName, CONSTRUCTOR_DESC);
+ nextIsInvoke(Opcodes.INVOKESPECIAL, superClassName,
+ CONSTRUCTOR_NAME, CONSTRUCTOR_DESC);
nextIs(Opcodes.RETURN);
return cursor != null;
}
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 b0306662..e0aba35d 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
@@ -46,7 +46,8 @@ public final class StringSwitchEcjFilter implements IFilter {
return;
}
cursor = start;
- nextIsInvokeVirtual("java/lang/String", "hashCode");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+ "()I");
nextIsSwitch();
if (cursor == null) {
return;
@@ -73,7 +74,8 @@ public final class StringSwitchEcjFilter implements IFilter {
while (true) {
nextIsVar(Opcodes.ALOAD, "s");
nextIs(Opcodes.LDC);
- nextIsInvokeVirtual("java/lang/String", "equals");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String",
+ "equals", "(Ljava/lang/Object;)Z");
// jump to case
nextIs(Opcodes.IFNE);
if (cursor == 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 36421ee4..3033d9bc 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
@@ -68,12 +68,14 @@ public final class StringSwitchJavacFilter implements IFilter {
// 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");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+ "()I");
next();
while (true) {
nextIsVar(Opcodes.ALOAD, "s");
nextIs(Opcodes.LDC);
- nextIsInvokeVirtual("java/lang/String", "equals");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/String",
+ "equals", "(Ljava/lang/Object;)Z");
// jump to next comparison or second switch
nextIs(Opcodes.IFEQ);
// ICONST, BIPUSH or SIPUSH
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
index 158799f6..94dea561 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
@@ -200,7 +200,8 @@ public final class TryWithResourcesEcjFilter implements IFilter {
// "primaryExc.addSuppressed(suppressedExc)"
nextIsVar(Opcodes.ALOAD, "primaryExc");
nextIsVar(Opcodes.ALOAD, suppressedExc);
- nextIsInvokeVirtual("java/lang/Throwable", "addSuppressed");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/Throwable",
+ "addSuppressed", "(Ljava/lang/Throwable;)V");
nextIsLabel(endLabel);
return cursor != null;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
index 464031a5..7a20f74f 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
@@ -77,7 +77,8 @@ public final class TryWithResourcesJavac11Filter implements IFilter {
nextIsVar(Opcodes.ASTORE, "t");
nextIsVar(Opcodes.ALOAD, "primaryExc");
nextIsVar(Opcodes.ALOAD, "t");
- nextIsInvokeVirtual("java/lang/Throwable", "addSuppressed"); // primaryExc.addSuppressed(t)
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/Throwable",
+ "addSuppressed", "(Ljava/lang/Throwable;)V"); // primaryExc.addSuppressed(t)
nextIsVar(Opcodes.ALOAD, "primaryExc");
nextIs(Opcodes.ATHROW);
if (cursor == null) {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
index e6762d6b..23ecb0e6 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
@@ -216,7 +216,8 @@ public final class TryWithResourcesJavacFilter implements IFilter {
// "primaryExc.addSuppressed(t)"
nextIsVar(Opcodes.ALOAD, "primaryExc");
nextIsVar(Opcodes.ALOAD, ctx + "t");
- nextIsInvokeVirtual("java/lang/Throwable", "addSuppressed");
+ nextIsInvoke(Opcodes.INVOKEVIRTUAL, "java/lang/Throwable",
+ "addSuppressed", "(Ljava/lang/Throwable;)V");
nextIs(Opcodes.GOTO);
// "r.close()"
nextIsClose();