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.codehaus.groovy:groovy-all:2.3.9'
|
||||||
compileOnly 'org.jetbrains.kotlin:gradle-api:2.2'
|
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 'org.codehaus.groovy:groovy-all:2.3.9'
|
||||||
agp25CompileOnly gradleApi()
|
agp25CompileOnly gradleApi()
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -1,10 +1,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin
|
package org.jetbrains.kotlin.gradle.plugin
|
||||||
|
|
||||||
import com.android.build.gradle.*
|
import com.android.build.gradle.*
|
||||||
import com.android.build.gradle.api.BaseVariant
|
import com.android.build.gradle.api.*
|
||||||
import com.android.build.gradle.api.SourceKind
|
|
||||||
import com.android.build.gradle.api.TestVariant
|
|
||||||
import com.android.build.gradle.api.UnitTestVariant
|
|
||||||
import com.android.builder.model.SourceProvider
|
import com.android.builder.model.SourceProvider
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.tasks.compile.AbstractCompile
|
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
|
// Then don't register kotlinTask output, but only use it for Java compilation
|
||||||
javaTask.classpath = project.files(kotlinTask.destinationDir).from(javaTask.classpath)
|
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> =
|
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 val KotlinCompile.annotationsFile: File? get() = kaptOptions.annotationsFile
|
||||||
protected fun KotlinCompile.setJavaOutput(file: File) { javaOutputDir = file }
|
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)
|
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.kotlinDebug
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinInfo
|
import org.jetbrains.kotlin.gradle.plugin.kotlinInfo
|
||||||
import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion
|
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.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
|
import org.jetbrains.kotlin.incremental.*
|
||||||
import org.jetbrains.kotlin.utils.LibraryUtils
|
import org.jetbrains.kotlin.utils.LibraryUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -117,6 +117,9 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments>() : AbstractCo
|
|||||||
internal val moduleName: String
|
internal val moduleName: String
|
||||||
get() = "${project.name}_$sourceSetName"
|
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() {
|
override fun compile() {
|
||||||
assert(false, { "unexpected call to compile()" })
|
assert(false, { "unexpected call to compile()" })
|
||||||
}
|
}
|
||||||
@@ -223,7 +226,9 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
|
|
||||||
internal fun addFriendPathForTestTask(friendKotlinTaskName: String, args: K2JVMCompilerArguments) {
|
internal fun addFriendPathForTestTask(friendKotlinTaskName: String, args: K2JVMCompilerArguments) {
|
||||||
val friendTask = project.getTasksByName(friendKotlinTaskName, /* recursive = */false).firstOrNull() as? KotlinCompile ?: return
|
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
|
args.moduleName = friendTask.moduleName
|
||||||
logger.kotlinDebug("java destination directory for production = ${friendTask.javaOutputDir}")
|
logger.kotlinDebug("java destination directory for production = ${friendTask.javaOutputDir}")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user