aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
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.java34
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);