diff --git a/buildSrc/src/main/kotlin/pill/parser.kt b/buildSrc/src/main/kotlin/pill/parser.kt index 8a9df58baa1..ec60c05e1ba 100644 --- a/buildSrc/src/main/kotlin/pill/parser.kt +++ b/buildSrc/src/main/kotlin/pill/parser.kt @@ -235,8 +235,9 @@ private fun parseSourceRoots(project: Project): List { return emptyList() } - val kotlinTasksBySourceSet = project.tasks - .filter { it.name.startsWith("compile") && it.name.endsWith("Kotlin") } + val kotlinTasksBySourceSet = project.tasks.names + .filter { it.startsWith("compile") && it.endsWith("Kotlin") } + .map { project.tasks.getByName(it) } .associateBy { it.invokeInternal("getSourceSetName") } val sourceRoots = mutableListOf() @@ -534,4 +535,4 @@ private val Project.sourceSets: SourceSetContainer lateinit var result: SourceSetContainer project.configure { result = sourceSets } return result - } \ No newline at end of file + } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index f7b340bf85d..7213aa436a3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -861,4 +861,31 @@ class KotlinGradleIT : BaseGradleIT() { expectedKotlinDirs.forEach { assertTrue(it in reportedSrcDirs, "$it should be included into the Java source sets") } } } + + @Test + fun testNoTaskConfigurationForcing() { + val gradleVersionRequirement = GradleVersionRequired.AtLeast("4.9") + val projects = listOf( + Project("simpleProject", gradleVersionRequirement), + Project("kotlin2JsNoOutputFileProject", gradleVersionRequirement), + Project("sample-app", gradleVersionRequirement, "new-mpp-lib-and-app") + ) + + projects.forEach { + it.apply { + setupWorkingDir() + + val taskConfigureFlag = "Configured the task!" + + gradleBuildScript().appendText("\n" + """ + tasks.register("myTask") { println '$taskConfigureFlag' } + """.trimIndent()) + + build("help") { + assertSuccessful() + assertNotContains(taskConfigureFlag) + } + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index d9b5a21984d..85c0e819545 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -367,25 +367,21 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil val jarToModule = HashMap() for (project in gradle.rootProject.allprojects) { - for (task in project.tasks) { - when (task) { - is AbstractKotlinCompile<*> -> { - val module = IncrementalModuleEntry(project.path, task.moduleName, project.buildDir, task.buildHistoryFile) - dirToModule[task.destinationDir] = module - task.javaOutputDir?.let { dirToModule[it] = module } - nameToModules.getOrPut(module.name) { HashSet() }.add(module) + project.tasks.withType(AbstractKotlinCompile::class.java).forEach { task -> + val module = IncrementalModuleEntry(project.path, task.moduleName, project.buildDir, task.buildHistoryFile) + dirToModule[task.destinationDir] = module + task.javaOutputDir?.let { dirToModule[it] = module } + nameToModules.getOrPut(module.name) { HashSet() }.add(module) - if (task is Kotlin2JsCompile) { - jarForSourceSet(project, task.sourceSetName)?.let { - jarToModule[it] = module - } - } - } - is InspectClassesForMultiModuleIC -> { - jarToClassListFile[File(task.archivePath)] = task.classesListFile + if (task is Kotlin2JsCompile) { + jarForSourceSet(project, task.sourceSetName)?.let { + jarToModule[it] = module } } } + project.tasks.withType(InspectClassesForMultiModuleIC::class.java).forEach { task -> + jarToClassListFile[File(task.archivePath)] = task.classesListFile + } } return IncrementalModuleInfo( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt index 84c8403457a..b24a47f8773 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt @@ -161,7 +161,7 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin protected open fun addCommonSourceSetToPlatformSourceSet(commonSourceSet: Named, platformProject: Project) { platformProject.whenEvaluated { // At the point when the source set in the platform module is created, the task does not exist val platformTask = platformProject.tasks - .filterIsInstance>() + .withType(AbstractKotlinCompile::class.java) .singleOrNull { it.sourceSetName == commonSourceSet.name } // TODO use strict check once this code is not run in K/N val commonSources = getKotlinSourceDirectorySetSafe(commonSourceSet)!! @@ -243,4 +243,4 @@ open class KotlinPlatformJsPlugin : KotlinPlatformImplementationPluginBase("js") project.applyPlugin() super.apply(project) } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index 9c2f6bd1542..c7d4661e2cb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -44,8 +44,8 @@ class ScriptingGradleSubplugin : Plugin { val javaPluginConvention = project.convention.findPlugin(JavaPluginConvention::class.java) if (javaPluginConvention?.sourceSets?.isEmpty() == false) { - project.tasks.all { task -> - if (task is KotlinCompile && task !is KaptGenerateStubsTask) { + project.tasks.withType(KotlinCompile::class.java) { task -> + if (task !is KaptGenerateStubsTask) { val configuration = project.configurations.findByName(getConfigurationName(task.sourceSetName)) if (configuration?.isEmpty == false) { javaPluginConvention.sourceSets.findByName(task.sourceSetName)?.let { sourceSet -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 63f9a90babb..e4c312b65d5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -423,12 +423,12 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl private fun disableMultiModuleICIfNeeded() { if (!incremental || javaOutputDir == null) return - val illegalTask = project.tasks.firstOrNull { + val illegalTask = project.tasks.matching { it is AbstractCompile && it !is JavaCompile && it !is AbstractKotlinCompile<*> && javaOutputDir!!.isParentOf(it.destinationDir) - } as? AbstractCompile + }.firstOrNull() as? AbstractCompile if (illegalTask != null) { project.logger.info(