[Gradle, MPP] findAndroidTarget: Return null when missing
Prior to this change a 'Collection is empty.' error was reported when the Android plugin was applied without an Android Kotlin target being registered. ^KT-41641 Verification Pending
This commit is contained in:
committed by
Space
parent
c7cfa97748
commit
db21bfe13b
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import com.android.build.gradle.LibraryExtension
|
||||
import org.jetbrains.kotlin.gradle.targets.android.findAndroidTarget
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertSame
|
||||
|
||||
class KT41641AbsentAndroidTarget : MultiplatformExtensionTest() {
|
||||
@Test
|
||||
fun `test android plugin without android target`() {
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
project.plugins.apply("android-library")
|
||||
|
||||
/* Arbitrary minimal Android setup */
|
||||
val android = project.extensions.getByName("android") as LibraryExtension
|
||||
android.compileSdkVersion(30)
|
||||
|
||||
kotlin.jvm()
|
||||
|
||||
/* Previously failed with 'Collection is empty.' */
|
||||
assertNull(project.findAndroidTarget())
|
||||
assertSame(kotlin.android(), project.findAndroidTarget())
|
||||
}
|
||||
}
|
||||
+1
-9
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.resolveAllDependsOnSourceSets
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withAllDependsOnSourceSets
|
||||
import org.jetbrains.kotlin.gradle.targets.android.findAndroidTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.JvmCompilationsTestRunSource
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun
|
||||
@@ -207,15 +208,6 @@ private fun chooseAndAddStdlibDependency(
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.findAndroidTarget(): KotlinAndroidTarget? {
|
||||
val kotlinExtension = project.kotlinExtension
|
||||
return when (kotlinExtension) {
|
||||
is KotlinMultiplatformExtension -> kotlinExtension.targets.withType(KotlinAndroidTarget::class.java).single()
|
||||
is KotlinAndroidProjectExtension -> kotlinExtension.target
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private fun androidMainSourceSetName(project: Project): String {
|
||||
val target = project.findAndroidTarget() ?: error("No Android target found")
|
||||
return AbstractAndroidProjectHandler.kotlinSourceSetNameForAndroidSourceSet(target, "main")
|
||||
|
||||
+1
-1
@@ -58,4 +58,4 @@ internal fun Project.sourceSetMetadataConfigurationByScope(sourceSet: KotlinSour
|
||||
COMPILE_ONLY_SCOPE -> sourceSet.compileOnlyMetadataConfigurationName
|
||||
RUNTIME_ONLY_SCOPE -> sourceSet.runtimeOnlyMetadataConfigurationName
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.android
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
|
||||
internal fun Project.findAndroidTarget(): KotlinAndroidTarget? {
|
||||
return when (val kotlinExtension = project.kotlinExtension) {
|
||||
is KotlinMultiplatformExtension -> kotlinExtension.targets.withType(KotlinAndroidTarget::class.java).singleOrNull()
|
||||
is KotlinAndroidProjectExtension -> kotlinExtension.target
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user