diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 9d9656fe124..5e9d82f1d9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -17,6 +17,7 @@ import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE +import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.FileCollection import org.gradle.api.internal.artifacts.ArtifactAttributes import org.gradle.api.plugins.BasePlugin @@ -135,26 +136,26 @@ abstract class AbstractKotlinTargetConfigurator ) { val project = compilation.target.project - project.locateOrRegisterTask(compilation.processResourcesTaskName) { resourcesTask -> + val resourcesDestinationDir = project.file(compilation.output.resourcesDir) + val resourcesTask = project.locateOrRegisterTask(compilation.processResourcesTaskName) { resourcesTask -> resourcesTask.description = "Processes $resourceSet." resourcesTask.from(resourceSet) - resourcesTask.into(project.file(compilation.output.resourcesDir)) + resourcesTask.into(resourcesDestinationDir) } + + compilation.output.resourcesDirProvider = resourcesTask.map { resourcesDestinationDir } } protected fun createLifecycleTask(compilation: KotlinCompilation<*>) { val project = compilation.target.project - compilation.output.classesDirs.from(project.files().builtBy(compilation.compileAllTaskName)) - project.registerTask(compilation.compileAllTaskName) { it.group = LifecycleBasePlugin.BUILD_GROUP it.description = "Assembles outputs for compilation '${compilation.name}' of target '${compilation.target.name}'" - it.dependsOn(compilation.compileKotlinTaskName) - if (compilation is KotlinCompilationWithResources) { - it.dependsOn(compilation.processResourcesTaskName) - } + it.inputs.files(compilation.output.classesDirs) + it.inputs.files(compilation.output.resourcesDirProvider) } + (compilation.output.allOutputs as? ConfigurableFileCollection)?.from(project.files().builtBy(compilation.compileAllTaskName)) } override fun defineConfigurationsForTarget(target: KotlinTargetType) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt index d52b498e283..77c884da16a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilationOutputs.kt @@ -19,9 +19,9 @@ class DefaultKotlinCompilationOutput( override val classesDirs: ConfigurableFileCollection = project.files() - override val allOutputs = project.files().apply { + override val allOutputs: ConfigurableFileCollection = project.files().apply { from(classesDirs) - from(Callable { resourcesDir }) + from(Callable { resourcesDirProvider }) } override val resourcesDir: File diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt index a492734858f..11aea78c6f6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt @@ -55,7 +55,7 @@ open class LifecycleTasksManager(private val project: Project) { open fun registerClassesTask(compilationData: KotlinCompilationData<*>) = with(project) { val classesTaskName = compilationData.compileAllTaskName val classesTask = project.tasks.register(classesTaskName) { classesTask -> - classesTask.dependsOn(compilationData.output.allOutputs) + classesTask.inputs.files(compilationData.output.allOutputs) } project.tasks.named(LifecycleBasePlugin.BUILD_TASK_NAME).configure { it.dependsOn(classesTask) } }