diff options
author | Evgeny Mandrikov <138671+Godin@users.noreply.github.com> | 2019-03-04 23:01:39 +0100 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2019-03-04 23:01:39 +0100 |
commit | c30eb290f7958dce50c072527fbe6234e8388dd2 (patch) | |
tree | dade3590649d0462bf9ace8b86628fcdbfd72c4f /org.jacoco.core/src/org/jacoco/core/internal/analysis | |
parent | 5f46dcf8c7ed2c7646daa76389201b404250b1fc (diff) | |
download | jacoco-c30eb290f7958dce50c072527fbe6234e8388dd2.tar.gz |
Update KotlinCoroutineFilter for Kotlin 1.3.30 (#849)
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/KotlinCoroutineFilter.java | 34 |
1 files changed, 20 insertions, 14 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 b1d448af..e2bed498 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 @@ -73,13 +73,7 @@ public final class KotlinCoroutineFilter implements IFilter { s.labels.size() * 2); nextIs(Opcodes.ALOAD); - nextIs(Opcodes.DUP); - nextIsType(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); - nextIs(Opcodes.IFEQ); - nextIsType(Opcodes.CHECKCAST, "kotlin/Result$Failure"); - nextIs(Opcodes.GETFIELD); - nextIs(Opcodes.ATHROW); - nextIs(Opcodes.POP); + nextIsThrowOnFailure(); if (cursor == null) { return; @@ -109,13 +103,7 @@ public final class KotlinCoroutineFilter implements IFilter { for (AbstractInsnNode j = i; j != null; j = j.getNext()) { cursor = j; nextIs(Opcodes.ALOAD); - nextIs(Opcodes.DUP); - nextIsType(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); - nextIs(Opcodes.IFEQ); - nextIsType(Opcodes.CHECKCAST, "kotlin/Result$Failure"); - nextIs(Opcodes.GETFIELD); - nextIs(Opcodes.ATHROW); - nextIs(Opcodes.POP); + nextIsThrowOnFailure(); nextIs(Opcodes.ALOAD); if (cursor != null && skipNonOpcodes(cursor @@ -149,6 +137,24 @@ public final class KotlinCoroutineFilter implements IFilter { } } + private void nextIsThrowOnFailure() { + final AbstractInsnNode c = cursor; + nextIsInvokeStatic("kotlin/ResultKt", "throwOnFailure"); + if (cursor == null) { + cursor = c; + // Before resolution of + // https://youtrack.jetbrains.com/issue/KT-28015 in + // Kotlin 1.3.30 + nextIs(Opcodes.DUP); + nextIsType(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); + nextIs(Opcodes.IFEQ); + nextIsType(Opcodes.CHECKCAST, "kotlin/Result$Failure"); + nextIs(Opcodes.GETFIELD); + nextIs(Opcodes.ATHROW); + nextIs(Opcodes.POP); + } + } + private void nextIsCreateStateInstance() { nextIs(Opcodes.INSTANCEOF); |