aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Mandrikov <138671+Godin@users.noreply.github.com>2021-01-08 14:18:49 +0100
committerGitHub <noreply@github.com>2021-01-08 14:18:49 +0100
commita2c723cab221d4ea245eb15a0c628f011aa146e6 (patch)
tree60ac8ec87f2346cf361cc454319e0f6dcdc5e892
parente859274c57f4bd28cbe34d3048682e5ab74e7a3d (diff)
downloadjacoco-a2c723cab221d4ea245eb15a0c628f011aa146e6.tar.gz
Update filter for suspending lambdas for Kotlin 1.4.20 (#1149)
-rw-r--r--org.jacoco.core.test.validation.kotlin/pom.xml6
-rw-r--r--org.jacoco.core.test.validation/pom.xml10
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java10
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java16
-rw-r--r--org.jacoco.doc/docroot/doc/changes.html3
5 files changed, 34 insertions, 11 deletions
diff --git a/org.jacoco.core.test.validation.kotlin/pom.xml b/org.jacoco.core.test.validation.kotlin/pom.xml
index 69511f3a..0f3cae74 100644
--- a/org.jacoco.core.test.validation.kotlin/pom.xml
+++ b/org.jacoco.core.test.validation.kotlin/pom.xml
@@ -25,7 +25,11 @@
<name>JaCoCo :: Test :: Core :: Validation Kotlin</name>
<properties>
- <kotlin.version>1.4.0</kotlin.version>
+ <!--
+ re-include this module in profiles for JDK 16 and 17 in org.jacoco.core.test.validation
+ once there is version with resolved https://youtrack.jetbrains.com/issue/KT-43704
+ -->
+ <kotlin.version>1.4.20</kotlin.version>
</properties>
<dependencies>
diff --git a/org.jacoco.core.test.validation/pom.xml b/org.jacoco.core.test.validation/pom.xml
index cbfa9ffe..00bca5bb 100644
--- a/org.jacoco.core.test.validation/pom.xml
+++ b/org.jacoco.core.test.validation/pom.xml
@@ -249,7 +249,12 @@
<maven.compiler.target>16</maven.compiler.target>
</properties>
<modules>
+ <!--
+ kotlin-maven-plugin versions 1.4.20 and 1.4.21 fail
+ due to https://openjdk.java.net/jeps/396
+ see https://youtrack.jetbrains.com/issue/KT-43704
<module>../org.jacoco.core.test.validation.kotlin</module>
+ -->
<module>../org.jacoco.core.test.validation.java7</module>
<module>../org.jacoco.core.test.validation.java8</module>
<module>../org.jacoco.core.test.validation.java14</module>
@@ -272,7 +277,12 @@
<maven.compiler.target>17</maven.compiler.target>
</properties>
<modules>
+ <!--
+ kotlin-maven-plugin versions 1.4.20 and 1.4.21 fail
+ due to https://openjdk.java.net/jeps/396
+ see https://youtrack.jetbrains.com/issue/KT-43704
<module>../org.jacoco.core.test.validation.kotlin</module>
+ -->
<module>../org.jacoco.core.test.validation.java7</module>
<module>../org.jacoco.core.test.validation.java8</module>
<module>../org.jacoco.core.test.validation.java14</module>
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 f5847c37..f96ed78e 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
@@ -33,12 +33,11 @@ public class KotlinCoroutineFilterTest extends FilterTestBase {
context.classAnnotations
.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
- m.visitLabel(new Label());
- final Range range1 = new Range();
- range1.fromInclusive = m.instructions.getLast();
m.visitMethodInsn(Opcodes.INVOKESTATIC,
"kotlin/coroutines/intrinsics/IntrinsicsKt",
"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+ final Range range1 = new Range();
+ range1.fromInclusive = m.instructions.getLast();
m.visitVarInsn(Opcodes.ASTORE, 4);
m.visitVarInsn(Opcodes.ALOAD, 0);
@@ -129,12 +128,11 @@ public class KotlinCoroutineFilterTest extends FilterTestBase {
context.classAnnotations
.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
- m.visitLabel(new Label());
- final Range range1 = new Range();
- range1.fromInclusive = m.instructions.getLast();
m.visitMethodInsn(Opcodes.INVOKESTATIC,
"kotlin/coroutines/intrinsics/IntrinsicsKt",
"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+ final Range range1 = new Range();
+ range1.fromInclusive = m.instructions.getLast();
m.visitVarInsn(Opcodes.ASTORE, 4);
m.visitVarInsn(Opcodes.ALOAD, 0);
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());
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index 5d20c4a6..f35ffaf7 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -30,6 +30,9 @@
<li>Branch added by the Kotlin compiler version 1.4.0 and above for "unsafe" cast
operator is filtered out during generation of report
(GitHub <a href="https://github.com/jacoco/jacoco/issues/1143">#1143</a>).</li>
+ <li>Branches added by the Kotlin compiler version 1.4.20 and above for suspending
+ lambdas are filtered out during generation of report
+ (GitHub <a href="https://github.com/jacoco/jacoco/issues/1149">#1149</a>).</li>
</ul>
<h3>Non-functional Changes</h3>