diff options
author | Evgeny Mandrikov <138671+Godin@users.noreply.github.com> | 2021-01-08 14:18:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 14:18:49 +0100 |
commit | a2c723cab221d4ea245eb15a0c628f011aa146e6 (patch) | |
tree | 60ac8ec87f2346cf361cc454319e0f6dcdc5e892 /org.jacoco.core/src/org/jacoco/core/internal/analysis/filter | |
parent | e859274c57f4bd28cbe34d3048682e5ab74e7a3d (diff) | |
download | jacoco-a2c723cab221d4ea245eb15a0c628f011aa146e6.tar.gz |
Update filter for suspending lambdas for Kotlin 1.4.20 (#1149)
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis/filter')
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java | 16 |
1 files changed, 12 insertions, 4 deletions
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 6d41a80c..23943ab5 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 @@ -20,6 +20,7 @@ import org.objectweb.asm.Type; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.JumpInsnNode; import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.TableSwitchInsnNode; @@ -67,10 +68,17 @@ public final class KotlinCoroutineFilter implements IFilter { private void match(final MethodNode methodNode, final IFilterOutput output) { - cursor = methodNode.instructions.getFirst(); - nextIsInvoke(Opcodes.INVOKESTATIC, - "kotlin/coroutines/intrinsics/IntrinsicsKt", - "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;"); + cursor = skipNonOpcodes(methodNode.instructions.getFirst()); + if (cursor == null || cursor.getOpcode() != Opcodes.INVOKESTATIC) { + cursor = null; + } else { + final MethodInsnNode m = (MethodInsnNode) cursor; + if (!"kotlin/coroutines/intrinsics/IntrinsicsKt".equals(m.owner) + || !"getCOROUTINE_SUSPENDED".equals(m.name) + || !"()Ljava/lang/Object;".equals(m.desc)) { + cursor = null; + } + } if (cursor == null) { cursor = skipNonOpcodes(methodNode.instructions.getFirst()); |