From a05bb3c77c05d916450dbb6cdacc6901b0034385 Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Wed, 6 Apr 2022 14:28:11 +0300 Subject: [PATCH] Store module info under own module name for incremental compilation #KT-51463 Fixed --- .../AbstractKotlinAndroidGradleTests.kt | 140 +++++++++++------- .../kotlin/gradle/tasks/KotlinJvmApiTest.kt | 2 + .../app/build.gradle | 1 + .../src/test/kotlin/com/example/UnitTest.kt | 15 ++ .../GradleKotlinCompilerRunner.kt | 4 +- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 3 + .../AbstractKotlinCompileConfig.kt | 1 + .../configuration/KotlinCompileConfig.kt | 4 +- 8 files changed, 113 insertions(+), 57 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/src/test/kotlin/com/example/UnitTest.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt index 9decdc4be63..f4fe4ecd421 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt @@ -666,6 +666,38 @@ open class KotlinAndroid70GradleIT : KotlinAndroid36GradleIT() { } } + @Test + fun testAndroidWithKaptIncremental() { + val project = Project("AndroidIncrementalMultiModule") + val options = defaultBuildOptions().copy(incremental = true) + project.setupWorkingDir().also { + project.gradleBuildScript("app").modify { + """ + apply plugin: 'org.jetbrains.kotlin.kapt' + $it + """.trimIndent() + } + } + project.build(":app:testDebugUnitTest", options = options) { + assertSuccessful() + } + + project.projectDir + .resolve("app/src/main/kotlin/com/example/KotlinActivity.kt") + .appendText( + """ + { + private val x = 1 + } + """.trimIndent() + ) + + project.build(":app:testDebugUnitTest", options = options) { + assertSuccessful() + assertNotContains("Non-incremental compilation will be performed") + } + } + @Test fun testNamespaceDSLInsteadOfPackageAttributeInManifest() { val project = Project("AndroidExtensionsProjectAGP7") @@ -761,38 +793,39 @@ abstract class KotlinAndroid3GradleIT : AbstractKotlinAndroidGradleTests() { gradleBuildScript("Lib").writeText( """ - buildscript { - repositories { - mavenLocal() - google() - gradlePluginPortal() - } - dependencies { - classpath "com.android.tools.build:gradle:${'$'}android_tools_version" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version" - } + buildscript { + repositories { + mavenLocal() + google() + gradlePluginPortal() } - - plugins { - id 'org.jetbrains.kotlin.multiplatform' + dependencies { + classpath "com.android.tools.build:gradle:${'$'}android_tools_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version" } - - class MyAction implements kotlin.jvm.functions.Function1 { - Void invoke(Project p) { - println("compilations: " + p.kotlin.targets.getByName("android").compilations.names) - } + } + + plugins { + id 'org.jetbrains.kotlin.multiplatform' + } + + class MyAction implements kotlin.jvm.functions.Function1 { + Void invoke (Project p) { + println("compilations: " + p.kotlin.targets.getByName("android").compilations.names) } - - org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginKt.whenEvaluated(project, new MyAction()) - - apply plugin: "android-library" - - android { - compileSdkVersion 22 - } - - kotlin { android("android") { } } - """.trimIndent()) + } + + org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginKt.whenEvaluated(project, new MyAction ()) + + apply plugin : "android-library" + + android { + compileSdkVersion 22 + } + + kotlin { android("android") { } } + """.trimIndent() + ) build("help") { assertSuccessful() @@ -885,10 +918,10 @@ abstract class AbstractKotlinAndroidGradleTests : BaseGradleIT() { val getSomethingKt = project.projectDir.walk().filter { it.isFile && it.name.endsWith("getSomething.kt") }.first() getSomethingKt.writeText( """ -package com.example + package com.example -fun getSomething() = 10 -""" + fun getSomething() = 10 + """ ) project.build("assembleDebug", options = options) { @@ -968,11 +1001,12 @@ fun getSomething() = 10 project.projectDir.resolve("app/build.gradle").appendText( """ - | - |androidExtensions { + | + |androidExtensions { | experimental = true - |} - """.trimMargin() + | + } + """.trimMargin() ) project.build("assembleDebug") { @@ -1129,27 +1163,27 @@ fun getSomething() = 10 gradleBuildScript().modify { """ - plugins { - id("com.android.lint") - } - - """.trimIndent() + it + plugins { + id("com.android.lint") + } + + """.trimIndent() + it } gradleBuildScript("Lib").appendText( "\n" + """ - android { - lintOptions.checkDependencies = true - } - dependencies { - implementation(project(":java-lib")) - } + android { + lintOptions.checkDependencies = true + } + dependencies { + implementation(project(":java-lib")) + } """.trimIndent() ) gradleSettingsScript().appendText( "\n" + """ - include("java-lib") + include("java-lib") """.trimIndent() ) @@ -1157,11 +1191,11 @@ fun getSomething() = 10 ensureParentDirsCreated() writeText( """ - plugins { - id("java-library") - id("com.android.lint") - } - """.trimIndent() + plugins { + id("java-library") + id("com.android.lint") + } + """.trimIndent() ) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt index a67e1abd06a..5e6d2acc63b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt @@ -41,6 +41,7 @@ class KotlinJvmApiTest : KGPBaseTest() { it.source("src/main") it.multiPlatformEnabled.set(false) it.moduleName.set("main") + it.ownModuleName.set("main") it.sourceSetName.set("main") it.useModuleDetection.set(false) it.destinationDirectory.fileValue(new File(project.buildDir, "fooOutput")) @@ -94,6 +95,7 @@ class KotlinJvmApiTest : KGPBaseTest() { it.source("src/main") it.multiPlatformEnabled.set(false) it.moduleName.set("main") + it.ownModuleName.set("main") it.sourceSetName.set("main") it.useModuleDetection.set(false) it.destinationDirectory.fileValue(new File(project.buildDir, "fooOutput")) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/build.gradle index faefb4e7ca0..9883dbb1f38 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/build.gradle @@ -21,4 +21,5 @@ dependencies { implementation project(":libJvmClassesOnly") implementation project(":libAndroid") implementation project(":libAndroidClassesOnly") + testImplementation "junit:junit:4.13.2" } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/src/test/kotlin/com/example/UnitTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/src/test/kotlin/com/example/UnitTest.kt new file mode 100644 index 00000000000..22621d46ce8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIncrementalMultiModule/app/src/test/kotlin/com/example/UnitTest.kt @@ -0,0 +1,15 @@ +package com.example + +import org.junit.Test +import org.junit.Assert.* +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +class UnitTest { + @Test + fun isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 67ebf5d085a..8cad9990ce7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -295,7 +295,7 @@ internal open class GradleCompilerRunner( if (task is AbstractKotlinCompile<*>) { val module = IncrementalModuleEntry( project.path, - task.moduleName.get(), + task.ownModuleName.get(), project.buildDir, task.buildHistoryFile.get().asFile, task.abiSnapshotFile.get().asFile @@ -327,7 +327,7 @@ internal open class GradleCompilerRunner( val kotlinTask = mainCompilation.compileKotlinTask as? AbstractKotlinCompile<*> ?: continue val module = IncrementalModuleEntry( project.path, - kotlinTask.moduleName.get(), + kotlinTask.ownModuleName.get(), project.buildDir, kotlinTask.buildHistoryFile.get().asFile, kotlinTask.abiSnapshotFile.get().asFile diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index b805dab7cff..c382f6aa754 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -274,6 +274,9 @@ abstract class AbstractKotlinCompile @Inject constr @get:Internal val startParameters = BuildMetricsReporterService.getStartParameters(project) + @get:Input + abstract val ownModuleName: Property + @get:Internal internal abstract val buildMetricsReporterService: Property diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt index 98e7775a8ee..f8140ae309e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt @@ -94,6 +94,7 @@ internal abstract class AbstractKotlinCompileConfig : AbstractKotl task.associatedJavaCompileTaskSources.from(javaTaskProvider.map { it.source }) task.associatedJavaCompileTaskName.value(javaTaskProvider.name) } - task.moduleName.value(providers.provider { + task.ownModuleName.value(providers.provider { (compilation.kotlinOptions as? KotlinJvmOptions)?.moduleName ?: task.parentKotlinOptions.orNull?.moduleName - ?: compilation.moduleName + ?: compilation.ownModuleName }) } }