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 | |
parent | e859274c57f4bd28cbe34d3048682e5ab74e7a3d (diff) | |
download | jacoco-a2c723cab221d4ea245eb15a0c628f011aa146e6.tar.gz |
Update filter for suspending lambdas for Kotlin 1.4.20 (#1149)
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> |