From 7edbf79b4be9a3b0a859e8988a509bb700998a71 Mon Sep 17 00:00:00 2001 From: Andrey Zinovyev Date: Wed, 10 Mar 2021 10:58:35 +0300 Subject: [PATCH] [KAPT] Don't fail on empty InsnList Fix failing on empty methods inline methods (after light generation) #KT-45032 Fixed --- .../kotlin/codegen/optimization/common/Util.kt | 2 +- .../kotlin/gradle/KaptIncrementalIT.kt | 18 +++++++++++++++++- .../src/main/java/delegate/Delegate.kt | 13 +++++++++++++ .../src/main/java/delegate/Usage.kt | 7 +++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Delegate.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Usage.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt index 2d0a16e6328..e83037243d5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/Util.kt @@ -61,7 +61,7 @@ class InsnSequence(val from: AbstractInsnNode, val to: AbstractInsnNode?) : Sequ } } -fun InsnList.asSequence() = InsnSequence(this) +fun InsnList.asSequence(): Sequence = if (size() == 0) emptySequence() else InsnSequence(this) fun MethodNode.prepareForEmitting() { stripOptimizationMarkers() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt index c520e6bee6e..6745ee1570f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt @@ -287,6 +287,22 @@ open class KaptIncrementalIT : BaseGradleIT() { } } + @Test + fun testChangeInlineDelegate() { + val project = getProject() + project.build("build") { + assertSuccessful() + } + + val file = project.projectDir.getFileByName("Usage.kt") + file.modify { "$it//" } + + project.build("build") { + assertSuccessful() + assertTasksExecuted(":kaptGenerateStubsKotlin", ":compileKotlin") + } + } + private fun CompiledProject.assertCompiledKotlinSourcesHandleKapt3( sources: Iterable, weakTesting: Boolean = false @@ -319,4 +335,4 @@ open class KaptIncrementalIT : BaseGradleIT() { val names = annotatedElementNames.map { it.capitalize() + "Generated" } return names.map { it + ".java" } } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Delegate.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Delegate.kt new file mode 100644 index 00000000000..e3c0a27d67e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Delegate.kt @@ -0,0 +1,13 @@ +package delegate + +import kotlin.reflect.KProperty + +class Delegate() { + inline operator fun getValue(thisRef: Any?, property: KProperty<*>): String { + return "I'm your val" + } + + inline operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) { + println("$value has been assigned to '${property.name}' in $thisRef.") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Usage.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Usage.kt new file mode 100644 index 00000000000..2d5bd107dc8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kaptIncrementalCompilationProject/src/main/java/delegate/Usage.kt @@ -0,0 +1,7 @@ +package delegate + +object Usage { + + var delegated: String by Delegate() + +}