KotlinPlugin: Setup default 'dependsOn' edges for Android source sets
This commit is contained in:
committed by
Sebastian Sellmair
parent
dbf34205ff
commit
1173c4380a
@@ -53,7 +53,7 @@ dependencies {
|
|||||||
compile("com.google.code.gson:gson:${rootProject.extra["versions.jar.gson"]}")
|
compile("com.google.code.gson:gson:${rootProject.extra["versions.jar.gson"]}")
|
||||||
compile("de.undercouch:gradle-download-task:4.0.2")
|
compile("de.undercouch:gradle-download-task:4.0.2")
|
||||||
implementation("com.github.gundy:semver4j:0.16.4")
|
implementation("com.github.gundy:semver4j:0.16.4")
|
||||||
|
|
||||||
compileOnly("com.android.tools.build:gradle:2.0.0")
|
compileOnly("com.android.tools.build:gradle:2.0.0")
|
||||||
compileOnly("com.android.tools.build:gradle-core:2.0.0")
|
compileOnly("com.android.tools.build:gradle-core:2.0.0")
|
||||||
compileOnly("com.android.tools.build:builder:2.0.0")
|
compileOnly("com.android.tools.build:builder:2.0.0")
|
||||||
@@ -79,8 +79,9 @@ dependencies {
|
|||||||
compileOnly("com.android.tools.build:gradle:3.0.0") { isTransitive = false }
|
compileOnly("com.android.tools.build:gradle:3.0.0") { isTransitive = false }
|
||||||
compileOnly("com.android.tools.build:gradle-core:3.0.0") { isTransitive = false }
|
compileOnly("com.android.tools.build:gradle-core:3.0.0") { isTransitive = false }
|
||||||
compileOnly("com.android.tools.build:builder-model:3.0.0") { isTransitive = false }
|
compileOnly("com.android.tools.build:builder-model:3.0.0") { isTransitive = false }
|
||||||
|
testImplementation("com.android.tools.build:gradle:4.0.1")
|
||||||
|
|
||||||
testCompile(intellijDep()) { includeJars( "junit", "serviceMessages", rootProject = rootProject) }
|
testCompile(intellijDep()) { includeJars("junit", "serviceMessages", rootProject = rootProject) }
|
||||||
|
|
||||||
testCompileOnly(project(":compiler"))
|
testCompileOnly(project(":compiler"))
|
||||||
testCompile(projectTests(":kotlin-build-common"))
|
testCompile(projectTests(":kotlin-build-common"))
|
||||||
@@ -103,7 +104,7 @@ runtimeJar(rewriteDefaultJarDepsToShadedCompiler()).configure {
|
|||||||
|
|
||||||
from {
|
from {
|
||||||
jarContents.asFileTree.map {
|
jarContents.asFileTree.map {
|
||||||
if (it.endsWith(".jar")) zipTree(it)
|
if (it.endsWith(".jar")) zipTree(it)
|
||||||
else it
|
else it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-8
@@ -774,6 +774,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool
|
|||||||
val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(
|
val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(
|
||||||
kotlinSourceSetNameForAndroidSourceSet(kotlinAndroidTarget, sourceSet.name)
|
kotlinSourceSetNameForAndroidSourceSet(kotlinAndroidTarget, sourceSet.name)
|
||||||
).apply {
|
).apply {
|
||||||
|
createDefaultDependsOnEdges(kotlinAndroidTarget, sourceSet, this)
|
||||||
kotlin.srcDir(project.file(project.file("src/${sourceSet.name}/kotlin")))
|
kotlin.srcDir(project.file(project.file("src/${sourceSet.name}/kotlin")))
|
||||||
kotlin.srcDirs(sourceSet.java.srcDirs)
|
kotlin.srcDirs(sourceSet.java.srcDirs)
|
||||||
}
|
}
|
||||||
@@ -845,6 +846,21 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createDefaultDependsOnEdges(
|
||||||
|
kotlinAndroidTarget: KotlinAndroidTarget,
|
||||||
|
androidSourceSet: AndroidSourceSet,
|
||||||
|
kotlinSourceSet: KotlinSourceSet
|
||||||
|
) {
|
||||||
|
val commonSourceSetName = when (androidSourceSet.name) {
|
||||||
|
"main" -> "commonMain"
|
||||||
|
"test" -> "commonTest"
|
||||||
|
"androidTest" -> "commonTest"
|
||||||
|
else -> return
|
||||||
|
}
|
||||||
|
val commonSourceSet = kotlinAndroidTarget.project.kotlinExtension.sourceSets.findByName(commonSourceSetName) ?: return
|
||||||
|
kotlinSourceSet.dependsOn(commonSourceSet)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Android variants have their configurations extendsFrom relation set up in a way that only some of the configurations of the
|
* The Android variants have their configurations extendsFrom relation set up in a way that only some of the configurations of the
|
||||||
* variants propagate the dependencies from production variants to test ones. To make this dependency propagation work for the Kotlin
|
* variants propagate the dependencies from production variants to test ones. To make this dependency propagation work for the Kotlin
|
||||||
@@ -961,14 +977,6 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool
|
|||||||
|
|
||||||
// Register the source only after the task is created, because the task is required for that:
|
// Register the source only after the task is created, because the task is required for that:
|
||||||
compilation.source(defaultSourceSet)
|
compilation.source(defaultSourceSet)
|
||||||
|
|
||||||
// In MPPs, add the common main Kotlin sources to non-test variants, the common test sources to test variants
|
|
||||||
val commonSourceSetName = if (getTestedVariantData(variantData) == null)
|
|
||||||
KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME else
|
|
||||||
KotlinSourceSet.COMMON_TEST_SOURCE_SET_NAME
|
|
||||||
project.kotlinExtension.sourceSets.findByName(commonSourceSetName)?.let {
|
|
||||||
compilation.source(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun postprocessVariant(
|
private fun postprocessVariant(
|
||||||
|
|||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 com.android.build.gradle.LibraryExtension
|
||||||
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
|
import org.gradle.testfixtures.ProjectBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class KotlinAndroidDependsOnEdgesTest {
|
||||||
|
@Test
|
||||||
|
fun `default android source set declares dependsOn commonMain`() {
|
||||||
|
val project = ProjectBuilder.builder().build()
|
||||||
|
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)
|
||||||
|
|
||||||
|
/* Minimal MPP setup */
|
||||||
|
val kotlin = project.kotlinExtension as KotlinMultiplatformExtension
|
||||||
|
kotlin.android("android")
|
||||||
|
|
||||||
|
/* Force evaluation */
|
||||||
|
project as ProjectInternal
|
||||||
|
project.evaluate()
|
||||||
|
|
||||||
|
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||||
|
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||||
|
val androidMain = kotlin.sourceSets.getByName("androidMain")
|
||||||
|
val androidTest = kotlin.sourceSets.getByName("androidTest")
|
||||||
|
val androidAndroidTest = kotlin.sourceSets.getByName("androidAndroidTest")
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonMain), androidMain.dependsOn,
|
||||||
|
"Expected androidMain to dependOn commonMain"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonTest), androidTest.dependsOn,
|
||||||
|
"Expected androidTest to dependOn commonTest"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonTest), androidAndroidTest.dependsOn,
|
||||||
|
"Expected androidAndroidTest to dependOn commonTest"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `custom dependsOn edges`() {
|
||||||
|
val project = ProjectBuilder.builder().build()
|
||||||
|
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)
|
||||||
|
|
||||||
|
/* Custom MPP setup */
|
||||||
|
val kotlin = project.kotlinExtension as KotlinMultiplatformExtension
|
||||||
|
kotlin.android("android")
|
||||||
|
kotlin.sourceSets.apply {
|
||||||
|
val jvmMain = create("jvmMain") {
|
||||||
|
it.dependsOn(getByName("commonMain"))
|
||||||
|
}
|
||||||
|
getByName("androidMain") {
|
||||||
|
it.dependsOn(jvmMain)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Force evaluation */
|
||||||
|
project as ProjectInternal
|
||||||
|
project.evaluate()
|
||||||
|
|
||||||
|
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||||
|
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||||
|
val jvmMain = kotlin.sourceSets.getByName("jvmMain")
|
||||||
|
val androidMain = kotlin.sourceSets.getByName("androidMain")
|
||||||
|
val androidTest = kotlin.sourceSets.getByName("androidTest")
|
||||||
|
val androidAndroidTest = kotlin.sourceSets.getByName("androidAndroidTest")
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonMain, jvmMain).sorted(), androidMain.dependsOn.sorted(),
|
||||||
|
"Expected androidMain to depend on commonMain and jvmMain"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonTest), androidTest.dependsOn,
|
||||||
|
"Expected androidTest to only depend on commonTest"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
setOf(commonTest), androidAndroidTest.dependsOn,
|
||||||
|
"Expected androidAndroidTest to only depend on commonTest"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Iterable<KotlinSourceSet>.sorted() = this.sortedBy { it.name }
|
||||||
Reference in New Issue
Block a user