diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 70cdae3241c..c5ebe89d6b0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -34,6 +34,12 @@ internal fun Project.createKotlinExtension(extensionClass: KClass { if (project.plugins.findPlugin(AndroidExtensionsSubpluginIndicator::class.java) == null) { return false } - project.multiplatformExtension?.let { kotlin -> + project.multiplatformExtensionOrNull?.let { kotlin -> return kotlin.targets.any { target -> target is KotlinAndroidTarget && target.compilations.any { it.compileKotlinTaskName == task.name } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt index e39700dea70..e680f07a9bd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinJsDcePlugin.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinSingleJavaTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.multiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -30,7 +30,7 @@ import java.io.File class KotlinJsDcePlugin : Plugin { override fun apply(project: Project) { - val kotlinExtension = project.multiplatformExtension ?: run { + val kotlinExtension = project.multiplatformExtensionOrNull ?: run { project.pluginManager.apply(Kotlin2JsPluginWrapper::class.java) project.kotlinExtension as KotlinSingleJavaTargetExtension } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt index 6f1be8b9f75..0b796661ab1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt @@ -9,7 +9,7 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.Sync import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.addExtension import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget @@ -143,12 +143,7 @@ open class KotlinCocoapodsPlugin: Plugin { override fun apply(project: Project): Unit = with(project) { pluginManager.withPlugin("kotlin-multiplatform") { - val kotlinExtension = project.kotlinExtension as? KotlinMultiplatformExtension - if (kotlinExtension == null) { - logger.info("Cannot apply cocoapods plugin: Cannot cast ${project.kotlinExtension} to KotlinMultiplatformExtension") - return@withPlugin - } - + val kotlinExtension = project.multiplatformExtension val cocoapodsExtension = CocoapodsExtension(this) kotlinExtension.addExtension(EXTENSION_NAME, cocoapodsExtension) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 8776190c9ec..84c04cc2b4c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -23,9 +23,7 @@ import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.internal.reflect.Instantiator import org.gradle.jvm.tasks.Jar import org.gradle.util.ConfigureUtil -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.dsl.configureOrCreate -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild @@ -34,10 +32,6 @@ import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.presetName -internal val Project.multiplatformExtension - get(): KotlinMultiplatformExtension? = - project.extensions.findByName("kotlin") as? KotlinMultiplatformExtension - class KotlinMultiplatformPlugin( private val fileResolver: FileResolver, private val instantiator: Instantiator, @@ -102,7 +96,7 @@ class KotlinMultiplatformPlugin( private fun setupCompilerPluginOptions(project: Project) { // common source sets use the compiler options from the metadata compilation: val metadataCompilation = - project.multiplatformExtension!!.targets + project.multiplatformExtension.targets .getByName(METADATA_TARGET_NAME) .compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) @@ -137,7 +131,7 @@ class KotlinMultiplatformPlugin( } fun setupDefaultPresets(project: Project) { - with((project.kotlinExtension as KotlinMultiplatformExtension).presets) { + with(project.multiplatformExtension.presets) { add(KotlinJvmTargetPreset(project, instantiator, fileResolver, kotlinPluginVersion)) add(KotlinJsTargetPreset(project, instantiator, fileResolver, kotlinPluginVersion)) add(KotlinAndroidTargetPreset(project, kotlinPluginVersion)) @@ -150,15 +144,15 @@ class KotlinMultiplatformPlugin( private fun configurePublishingWithMavenPublish(project: Project) = project.pluginManager.withPlugin("maven-publish") { _ -> - if (project.multiplatformExtension!!.run { isGradleMetadataAvailable && isGradleMetadataExperimental }) { + if (project.multiplatformExtension.run { isGradleMetadataAvailable && isGradleMetadataExperimental }) { SingleWarningPerBuild.show( project, GRADLE_METADATA_WARNING ) } - val targets = project.multiplatformExtension!!.targets - val kotlinSoftwareComponent = project.multiplatformExtension!!.rootSoftwareComponent + val targets = project.multiplatformExtension.targets + val kotlinSoftwareComponent = project.multiplatformExtension.rootSoftwareComponent project.extensions.configure(PublishingExtension::class.java) { publishing -> @@ -171,7 +165,7 @@ class KotlinMultiplatformPlugin( // Publish the root publication only if Gradle metadata publishing is enabled: project.tasks.withType(AbstractPublishToMaven::class.java).all { publishTask -> - publishTask.onlyIf { publishTask.publication != rootPublication || project.multiplatformExtension!!.isGradleMetadataAvailable } + publishTask.onlyIf { publishTask.publication != rootPublication || project.multiplatformExtension.isGradleMetadataAvailable } } // Enforce the order of creating the publications, since the metadata publication is used in the other publications: @@ -216,7 +210,7 @@ class KotlinMultiplatformPlugin( } } - private fun configureSourceSets(project: Project) = with(project.kotlinExtension as KotlinMultiplatformExtension) { + private fun configureSourceSets(project: Project) = with(project.multiplatformExtension) { val production = sourceSets.create(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME) val test = sourceSets.create(KotlinSourceSet.COMMON_TEST_SOURCE_SET_NAME) @@ -232,7 +226,7 @@ class KotlinMultiplatformPlugin( } private fun setUpConfigurationAttributes(project: Project) { - val targets = (project.kotlinExtension as KotlinMultiplatformExtension).targets + val targets = project.multiplatformExtension.targets project.afterEvaluate { targets.all { target -> @@ -306,7 +300,7 @@ internal fun sourcesJarTask(compilation: KotlinCompilation<*>, componentName: St internal fun compilationsBySourceSet(project: Project): Map>> = HashMap>>().also { result -> - for (target in project.multiplatformExtension!!.targets) { + for (target in project.multiplatformExtension.targets) { for (compilation in target.compilations) { for (sourceSet in compilation.allKotlinSourceSets) { result.getOrPut(sourceSet) { mutableSetOf() }.add(compilation) 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 461b34367ad..7b6f2441853 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 @@ -207,7 +207,7 @@ private object CompilationSourceSetUtil { projectSourceSetsInMultipleCompilationsCache.computeIfAbsent(project) { _ -> check(project.state.executed) { "Should only be computed after the project is evaluated" } - val compilations = (project.kotlinExtension as? KotlinMultiplatformExtension)?.targets?.flatMap { it.compilations } + val compilations = project.multiplatformExtensionOrNull?.targets?.flatMap { it.compilations } ?: return@computeIfAbsent null val sources = compilations diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt index 8cbf11d6e06..e292f38abcd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt @@ -14,6 +14,7 @@ import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.attributes.Usage import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent @@ -115,7 +116,7 @@ private fun associateDependenciesWithActualModuleDependencies( when (dependency) { is ProjectDependency -> { val dependencyProject = dependency.dependencyProject - val dependencyProjectKotlinExtension = dependencyProject.multiplatformExtension + val dependencyProjectKotlinExtension = dependencyProject.multiplatformExtensionOrNull ?: return@associate dependency to dependency val resolved = resolvedDependencies[Triple(dependency.group, dependency.name, dependency.version)]