[Gradle] KotlinWithJavaCompilationFactory: Use compile&runtime classpath from javaSourceSet

^KT-54867 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-09 11:55:32 +01:00
committed by Space Team
parent cc004c75c2
commit 126c8eafa3
3 changed files with 13 additions and 6 deletions
@@ -66,7 +66,7 @@ internal object JsKotlinCompilationDependencyConfigurationsFactory :
internal class JvmWithJavaCompilationDependencyConfigurationsFactory(private val target: KotlinWithJavaTarget<*, *>) : internal class JvmWithJavaCompilationDependencyConfigurationsFactory(private val target: KotlinWithJavaTarget<*, *>) :
KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory {
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer { override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer {
val javaSourceSet = this.target.javaSourceSets.maybeCreate(compilationName) val javaSourceSet = this.target.project.javaSourceSets.maybeCreate(compilationName)
return KotlinCompilationDependencyConfigurationsContainer( return KotlinCompilationDependencyConfigurationsContainer(
target = target, compilationName = compilationName, withRuntime = true, target = target, compilationName = compilationName, withRuntime = true,
apiConfigurationName = javaSourceSet.apiConfigurationName, apiConfigurationName = javaSourceSet.apiConfigurationName,
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinJvmCompilati
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationDependencyConfigurationsFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationDependencyConfigurationsFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationTaskNamesContainerFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationTaskNamesContainerFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory
import org.jetbrains.kotlin.gradle.utils.filesProvider
class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions, CO : KotlinCommonCompilerOptions> internal constructor( class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions, CO : KotlinCommonCompilerOptions> internal constructor(
override val target: KotlinWithJavaTarget<KotlinOptionsType, CO>, override val target: KotlinWithJavaTarget<KotlinOptionsType, CO>,
@@ -26,13 +27,13 @@ class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions,
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override fun create(name: String): KotlinWithJavaCompilation<KotlinOptionsType, CO> { override fun create(name: String): KotlinWithJavaCompilation<KotlinOptionsType, CO> {
val javaSourceSet = target.javaSourceSets.findByName(name) ?: run { val javaSourceSet = project.javaSourceSets.findByName(name) ?: run {
/* /*
Creating the java SourceSet first here: Creating the java SourceSet first here:
After the javaSourceSet is created, another .all hook will call into this factory creating the KotlinCompilation. After the javaSourceSet is created, another .all hook will call into this factory creating the KotlinCompilation.
This call will just return this instance instead eagerly This call will just return this instance instead eagerly
*/ */
target.javaSourceSets.create(name) project.javaSourceSets.create(name)
return target.compilations.getByName(name) return target.compilations.getByName(name)
} }
@@ -44,10 +45,16 @@ class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions,
}, },
compilationAssociator = KotlinJvmCompilationAssociator, compilationAssociator = KotlinJvmCompilationAssociator,
compilationOutputFactory = { _, compilationName -> compilationOutputFactory = { _, compilationName ->
KotlinWithJavaCompilationOutput(target.javaSourceSets.maybeCreate(compilationName)) KotlinWithJavaCompilationOutput(project.javaSourceSets.maybeCreate(compilationName))
}, },
compilationDependencyConfigurationsFactory = JvmWithJavaCompilationDependencyConfigurationsFactory(target), compilationDependencyConfigurationsFactory = JvmWithJavaCompilationDependencyConfigurationsFactory(target),
compilationTaskNamesContainerFactory = JvmWithJavaCompilationTaskNamesContainerFactory(javaSourceSet), compilationTaskNamesContainerFactory = JvmWithJavaCompilationTaskNamesContainerFactory(javaSourceSet),
/* Use compile & runtime classpath from javaSourceSet by default */
preConfigureAction = { compilation ->
compilation.compileDependencyFiles = project.filesProvider { javaSourceSet.compileClasspath }
compilation.runtimeDependencyFiles = project.filesProvider { javaSourceSet.runtimeClasspath }
}
) )
return project.objects.newInstance( return project.objects.newInstance(
@@ -65,8 +65,8 @@ abstract class KotlinWithJavaTarget<KotlinOptionsType : KotlinCommonOptions, CO
private fun sanitizeFileName(candidate: String): String = candidate.filter { it.isLetterOrDigit() } private fun sanitizeFileName(candidate: String): String = candidate.filter { it.isLetterOrDigit() }
internal val KotlinWithJavaTarget<*, *>.javaSourceSets: SourceSetContainer internal val Project.javaSourceSets: SourceSetContainer
get() = project.gradle get() = gradle
.variantImplementationFactory<JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory>() .variantImplementationFactory<JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory>()
.getInstance(project) .getInstance(project)
.sourceSets .sourceSets