[Gradle][Minor] Move *NativeCompilationDetails and MetadataMappedCompilationDetails into separate source files

KT-54312
This commit is contained in:
Sebastian Sellmair
2022-09-27 14:56:58 +02:00
committed by Space Team
parent 64e2e01d7d
commit b7c7ce3bf5
4 changed files with 148 additions and 102 deletions
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.plugin.sources.*
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.tooling.core.closure
import java.util.*
@@ -59,107 +58,6 @@ interface CompilationDetailsWithRuntime<T : KotlinCommonOptions> : CompilationDe
internal val CompilationDetails<*>.associateCompilationsClosure: Iterable<CompilationDetails<*>>
get() = closure { it.associateCompilations }
open class NativeCompilationDetails(
target: KotlinTarget,
compilationPurpose: String,
defaultSourceSet: KotlinSourceSet,
@Suppress("DEPRECATION")
createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>.() -> HasCompilerOptions<KotlinCommonCompilerOptions>,
@Suppress("DEPRECATION")
createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>.() -> KotlinCommonOptions
) : DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>(
target,
compilationPurpose,
defaultSourceSet,
createCompilerOptions,
createKotlinOptions
) {
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
lowerCamelCaseName(
target.disambiguationClassifier,
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(),
"compileKlibraries"
)
)
override val compileAllTaskName: String
get() = lowerCamelCaseName(target.disambiguationClassifier, compilationPurpose, "klibrary")
override fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) {
compileDependencyFilesHolder.dependencyFiles +=
other.output.classesDirs + project.filesProvider { other.compileDependencyFiles }
target.project.configurations.named(compilation.implementationConfigurationName).configure { configuration ->
configuration.extendsFrom(target.project.configurations.findByName(other.implementationConfigurationName))
}
}
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources)
}
}
internal open class SharedNativeCompilationDetails(
target: KotlinTarget,
compilationPurpose: String,
defaultSourceSet: KotlinSourceSet,
@Suppress("DEPRECATION")
createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>.() -> HasCompilerOptions<KotlinCommonCompilerOptions>,
@Suppress("DEPRECATION")
createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>.() -> KotlinCommonOptions
) : DefaultCompilationDetails<KotlinCommonOptions, KotlinCommonCompilerOptions>(
target,
compilationPurpose,
defaultSourceSet,
createCompilerOptions,
createKotlinOptions
) {
override val friendArtifacts: FileCollection
get() = super.friendArtifacts.plus(run {
val project = target.project
val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(defaultSourceSet).toMutableSet().apply {
// TODO: implement proper dependsOn/refines compiler args for Kotlin/Native and pass the dependsOn klibs separately;
// But for now, those dependencies don't have any special semantics, so passing all them as friends works, too
addAll(defaultSourceSet.internal.dependsOnClosure)
}
project.files(friendSourceSets.mapNotNull { project.getMetadataCompilationForSourceSet(it)?.output?.classesDirs })
})
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources)
}
}
internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
override val target: KotlinMetadataTarget,
defaultSourceSet: KotlinSourceSet,
final override val compilationData: AbstractKotlinFragmentMetadataCompilationData<T>
) : AbstractCompilationDetails<T>(defaultSourceSet) {
@Suppress("UNCHECKED_CAST")
override val compilation: KotlinCompilation<T>
get() = target.compilations.getByName(defaultSourceSet.name) as KotlinCompilation<T>
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder =
GradleKpmDependencyFilesHolder.ofMetadataCompilationDependencies(compilationData)
override val kotlinDependenciesHolder: HasKotlinDependencies
get() = compilationData.fragment
override fun associateWith(other: CompilationDetails<*>) {
throw UnsupportedOperationException("not supported in the mapped model")
}
override val associateCompilations: Set<CompilationDetails<*>>
get() = emptySet()
override fun whenSourceSetAdded(sourceSet: KotlinSourceSet) {
if (sourceSet != defaultSourceSet)
throw UnsupportedOperationException("metadata compilations have predefined sources")
}
}
internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
open val variant: GradleKpmVariantInternal,
override val target: KotlinTarget,
@@ -0,0 +1,43 @@
/*
* Copyright 2010-2022 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.plugin.mpp
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AbstractKotlinFragmentMetadataCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ofMetadataCompilationDependencies
internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
override val target: KotlinMetadataTarget,
defaultSourceSet: KotlinSourceSet,
final override val compilationData: AbstractKotlinFragmentMetadataCompilationData<T>
) : AbstractCompilationDetails<T>(defaultSourceSet) {
@Suppress("UNCHECKED_CAST")
override val compilation: KotlinCompilation<T>
get() = target.compilations.getByName(defaultSourceSet.name) as KotlinCompilation<T>
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder =
GradleKpmDependencyFilesHolder.ofMetadataCompilationDependencies(compilationData)
override val kotlinDependenciesHolder: HasKotlinDependencies
get() = compilationData.fragment
override fun associateWith(other: CompilationDetails<*>) {
throw UnsupportedOperationException("not supported in the mapped model")
}
override val associateCompilations: Set<CompilationDetails<*>>
get() = emptySet()
override fun whenSourceSetAdded(sourceSet: KotlinSourceSet) {
if (sourceSet != defaultSourceSet)
throw UnsupportedOperationException("metadata compilations have predefined sources")
}
}
@@ -0,0 +1,57 @@
/*
* Copyright 2010-2022 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.plugin.mpp
import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder
import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
open class NativeCompilationDetails(
target: KotlinTarget,
compilationPurpose: String,
defaultSourceSet: KotlinSourceSet,
@Suppress("DEPRECATION")
createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> HasCompilerOptions<CompilerCommonOptions>,
@Suppress("DEPRECATION")
createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> KotlinCommonOptions
) : DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>(
target,
compilationPurpose,
defaultSourceSet,
createCompilerOptions,
createKotlinOptions
) {
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
lowerCamelCaseName(
target.disambiguationClassifier,
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(),
"compileKlibraries"
)
)
override val compileAllTaskName: String
get() = lowerCamelCaseName(target.disambiguationClassifier, compilationPurpose, "klibrary")
override fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) {
compileDependencyFilesHolder.dependencyFiles +=
other.output.classesDirs + project.filesProvider { other.compileDependencyFiles }
target.project.configurations.named(compilation.implementationConfigurationName).configure { configuration ->
configuration.extendsFrom(target.project.configurations.findByName(other.implementationConfigurationName))
}
}
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources)
}
}
@@ -0,0 +1,48 @@
/*
* Copyright 2010-2022 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.plugin.mpp
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
internal open class SharedNativeCompilationDetails(
target: KotlinTarget,
compilationPurpose: String,
defaultSourceSet: KotlinSourceSet,
@Suppress("DEPRECATION")
createCompilerOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> HasCompilerOptions<CompilerCommonOptions>,
@Suppress("DEPRECATION")
createKotlinOptions: DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>.() -> KotlinCommonOptions
) : DefaultCompilationDetails<KotlinCommonOptions, CompilerCommonOptions>(
target,
compilationPurpose,
defaultSourceSet,
createCompilerOptions,
createKotlinOptions
) {
override val friendArtifacts: FileCollection
get() = super.friendArtifacts.plus(run {
val project = target.project
val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(defaultSourceSet).toMutableSet().apply {
// TODO: implement proper dependsOn/refines compiler args for Kotlin/Native and pass the dependsOn klibs separately;
// But for now, those dependencies don't have any special semantics, so passing all them as friends works, too
addAll(defaultSourceSet.internal.dependsOnClosure)
}
project.files(friendSourceSets.mapNotNull { project.getMetadataCompilationForSourceSet(it)?.output?.classesDirs })
})
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources)
}
}