Fix friend paths configuration with the new API for compile*Test tasks
Add lazy `friendClasspathEntries` to KotlinCompile Set `friendClasspathEntries` in the Android25Pro Change to AGP 3.0.0-alpha1; (cherry picked from commit 1d6dd5c) (cherry picked from commit 6cdf501)
This commit is contained in:
committed by
Alexey Tsvetkov
parent
7fae7c1d55
commit
1bc0e8a276
@@ -44,7 +44,7 @@ dependencies {
|
||||
compileOnly 'org.codehaus.groovy:groovy-all:2.3.9'
|
||||
compileOnly 'org.jetbrains.kotlin:gradle-api:2.2'
|
||||
|
||||
agp25CompileOnly 'com.android.tools.build:gradle:3.0.0-dev'
|
||||
agp25CompileOnly 'com.android.tools.build:gradle:3.0.0-alpha1'
|
||||
agp25CompileOnly 'org.codehaus.groovy:groovy-all:2.3.9'
|
||||
agp25CompileOnly gradleApi()
|
||||
|
||||
|
||||
+10
-4
@@ -1,10 +1,7 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin
|
||||
|
||||
import com.android.build.gradle.*
|
||||
import com.android.build.gradle.api.BaseVariant
|
||||
import com.android.build.gradle.api.SourceKind
|
||||
import com.android.build.gradle.api.TestVariant
|
||||
import com.android.build.gradle.api.UnitTestVariant
|
||||
import com.android.build.gradle.api.*
|
||||
import com.android.builder.model.SourceProvider
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.compile.AbstractCompile
|
||||
@@ -88,6 +85,15 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools
|
||||
// Then don't register kotlinTask output, but only use it for Java compilation
|
||||
javaTask.classpath = project.files(kotlinTask.destinationDir).from(javaTask.classpath)
|
||||
}
|
||||
|
||||
getTestedVariantData(variantData)?.let {
|
||||
// Find the classpath entry that comes from the tested variant and register it as the friend path, lazily
|
||||
kotlinTask.setFriendClasspathEntries(lazy {
|
||||
variantData.getCompileClasspathArtifacts(preJavaClasspathKey)
|
||||
.filter { it.id.componentIdentifier is TestedComponentIdentifier }
|
||||
.map { it.file.absolutePath }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
override fun getSourceProviders(variantData: BaseVariant): Iterable<SourceProvider> =
|
||||
|
||||
+1
@@ -375,6 +375,7 @@ abstract class AbstractAndroidProjectHandler<V>(private val kotlinConfigurationT
|
||||
|
||||
protected val KotlinCompile.annotationsFile: File? get() = kaptOptions.annotationsFile
|
||||
protected fun KotlinCompile.setJavaOutput(file: File) { javaOutputDir = file }
|
||||
protected fun KotlinCompile.setFriendClasspathEntries(lazyEntries: Lazy<List<String>?>) { friendClasspathEntries = lazyEntries }
|
||||
|
||||
protected val logger = Logging.getLogger(this.javaClass)
|
||||
|
||||
|
||||
+7
-2
@@ -38,9 +38,9 @@ import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.plugin.kotlinInfo
|
||||
import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion
|
||||
import org.jetbrains.kotlin.incremental.*
|
||||
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||
import org.jetbrains.kotlin.incremental.*
|
||||
import org.jetbrains.kotlin.utils.LibraryUtils
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
@@ -117,6 +117,9 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments>() : AbstractCo
|
||||
internal val moduleName: String
|
||||
get() = "${project.name}_$sourceSetName"
|
||||
|
||||
// In case the friend classpath entries are known at the task configuration time, they will be set
|
||||
internal var friendClasspathEntries: Lazy<List<String>?> = lazyOf(null)
|
||||
|
||||
override fun compile() {
|
||||
assert(false, { "unexpected call to compile()" })
|
||||
}
|
||||
@@ -223,7 +226,9 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
||||
|
||||
internal fun addFriendPathForTestTask(friendKotlinTaskName: String, args: K2JVMCompilerArguments) {
|
||||
val friendTask = project.getTasksByName(friendKotlinTaskName, /* recursive = */false).firstOrNull() as? KotlinCompile ?: return
|
||||
args.friendPaths = arrayOf(friendTask.javaOutputDir!!.absolutePath)
|
||||
args.friendPaths = arrayOf(
|
||||
friendTask.javaOutputDir!!.absolutePath,
|
||||
*friendClasspathEntries.value.orEmpty().toTypedArray())
|
||||
args.moduleName = friendTask.moduleName
|
||||
logger.kotlinDebug("java destination directory for production = ${friendTask.javaOutputDir}")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user