From fde8a34c32972987066e37651ff621f5cbaec18f Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Wed, 22 Jul 2020 08:13:55 +0300 Subject: [PATCH] KT-40058 NPE from mpp gradle plugin on kotlinx.benchmarks --- .../gradle/plugin/KotlinTargetConfigurator.kt | 14 +++++++++++--- .../kotlin/gradle/plugin/mpp/kotlinCompilations.kt | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) 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 57639760547..fa35af78736 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 @@ -52,6 +52,7 @@ interface KotlinTargetConfigurator { configureCompilations(target) defineConfigurationsForTarget(target) configureArchivesAndComponent(target) + configureSourceSet(target) configureBuild(target) configurePlatformSpecificModel(target) } @@ -61,6 +62,7 @@ interface KotlinTargetConfigurator { fun defineConfigurationsForTarget(target: KotlinTargetType) fun configureArchivesAndComponent(target: KotlinTargetType) fun configureBuild(target: KotlinTargetType) + fun configureSourceSet(target: KotlinTarget) fun configurePlatformSpecificModel(target: KotlinTargetType) = Unit } @@ -106,17 +108,23 @@ abstract class AbstractKotlinTargetConfigurator } } - override fun configureCompilationDefaults(target: KotlinTargetType) { + override fun configureSourceSet(target: KotlinTarget) { val project = target.project target.compilations.all { compilation -> - defineConfigurationsForCompilation(compilation) - if (createDefaultSourceSets) { project.kotlinExtension.sourceSets.maybeCreate(compilation.defaultSourceSetName).also { sourceSet -> compilation.source(sourceSet) // also adds dependencies, requires the configurations for target and source set to exist at this point } } + } + } + + override fun configureCompilationDefaults(target: KotlinTargetType) { + val project = target.project + + target.compilations.all { compilation -> + defineConfigurationsForCompilation(compilation) if (compilation is KotlinCompilationWithResources) { configureResourceProcessing(compilation, project.files(Callable { compilation.allKotlinSourceSets.map { it.resources } })) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 2fce70660ad..8c7771f5480 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import groovy.lang.Closure +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.attributes.AttributeContainer @@ -53,7 +54,7 @@ abstract class AbstractKotlinCompilation( @Suppress("UNCHECKED_CAST") override val compileKotlinTaskProvider: TaskProvider> - get() = target.project.locateTask(compileKotlinTaskName)!! + get() = target.project.locateTask(compileKotlinTaskName) ?: throw GradleException("Couldn't locate task $compileKotlinTaskName") // Don't declare this property in the constructor to avoid NPE // when an overriding property of a subclass is accessed instead.