aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
authorEvgeny Mandrikov <138671+Godin@users.noreply.github.com>2019-03-04 23:01:39 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2019-03-04 23:01:39 +0100
commitc30eb290f7958dce50c072527fbe6234e8388dd2 (patch)
treedade3590649d0462bf9ace8b86628fcdbfd72c4f /org.jacoco.core/src/org/jacoco/core/internal/analysis
parent5f46dcf8c7ed2c7646daa76389201b404250b1fc (diff)
downloadjacoco-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.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);