[Gradle][MPP] Ensure presence of .defaultSourceSet when creating kotlinCompilations
This will finally make calls to KotlinCompilation.defaultSourceSet or sourceSets.getByName(compilation.defaultSourceSetName) safe. This will also enable removing the `kotlinSourceSetsIncludingDefault` pitfall ^KT-52726 Verification Pending
This commit is contained in:
committed by
Space
parent
5f085f0448
commit
f4eba62f8c
+2
-1
@@ -33,7 +33,8 @@ interface KotlinCompilation<out T : KotlinCommonOptions> : Named, HasAttributes,
|
||||
|
||||
val allKotlinSourceSets: Set<KotlinSourceSet>
|
||||
|
||||
val defaultSourceSetName: String
|
||||
@Deprecated("Use defaultSourceSet.name instead", ReplaceWith("defaultSourceSet.name"))
|
||||
val defaultSourceSetName: String get() = defaultSourceSet.name
|
||||
|
||||
val defaultSourceSet: KotlinSourceSet
|
||||
|
||||
|
||||
+7
-8
@@ -8,21 +8,20 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.utils.MutableObservableSet
|
||||
import org.jetbrains.kotlin.gradle.utils.MutableObservableSetImpl
|
||||
import org.jetbrains.kotlin.gradle.utils.ObservableSet
|
||||
|
||||
abstract class AbstractCompilationDetails<T : KotlinCommonOptions> : CompilationDetails<T> {
|
||||
private val directlyIncludedKotlinSourceSetsImpl: MutableObservableSetImpl<KotlinSourceSet> by lazy {
|
||||
MutableObservableSetImpl(defaultSourceSet)
|
||||
}
|
||||
abstract class AbstractCompilationDetails<T : KotlinCommonOptions>(
|
||||
final override val defaultSourceSet: KotlinSourceSet
|
||||
) : CompilationDetails<T> {
|
||||
private val directlyIncludedKotlinSourceSetsImpl: MutableObservableSet<KotlinSourceSet> = MutableObservableSetImpl(defaultSourceSet)
|
||||
|
||||
final override val directlyIncludedKotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
get() = directlyIncludedKotlinSourceSetsImpl
|
||||
|
||||
private val allKotlinSourceSetsImpl: MutableObservableSetImpl<KotlinSourceSet> by lazy {
|
||||
MutableObservableSetImpl<KotlinSourceSet>().also { set ->
|
||||
defaultSourceSet.internal.withDependsOnClosure.forAll(set::add)
|
||||
}
|
||||
private val allKotlinSourceSetsImpl: MutableObservableSet<KotlinSourceSet> = MutableObservableSetImpl<KotlinSourceSet>().also { set ->
|
||||
defaultSourceSet.internal.withDependsOnClosure.forAll(set::add)
|
||||
}
|
||||
|
||||
final override val allKotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
|
||||
+4
-6
@@ -13,7 +13,6 @@ import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
@@ -60,7 +59,9 @@ abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
|
||||
|
||||
final override var compileDependencyFiles: FileCollection
|
||||
get() = compilationDetails.compileDependencyFilesHolder.dependencyFiles
|
||||
set(value) { compilationDetails.compileDependencyFilesHolder.dependencyFiles = value }
|
||||
set(value) {
|
||||
compilationDetails.compileDependencyFilesHolder.dependencyFiles = value
|
||||
}
|
||||
|
||||
final override val kotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
get() = compilationDetails.directlyIncludedKotlinSourceSets
|
||||
@@ -68,7 +69,7 @@ abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
|
||||
override val allKotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
get() = compilationDetails.allKotlinSourceSets
|
||||
|
||||
final override val defaultSourceSetName: String get() = compilationDetails.defaultSourceSetName
|
||||
override val defaultSourceSet: KotlinSourceSet get() = compilationDetails.defaultSourceSet
|
||||
|
||||
final override val compilationName: String get() = compilationDetails.compilationData.compilationPurpose
|
||||
|
||||
@@ -87,9 +88,6 @@ abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
|
||||
|
||||
override fun getAttributes(): AttributeContainer = attributeContainer
|
||||
|
||||
override val defaultSourceSet: KotlinSourceSet
|
||||
get() = target.project.kotlinExtension.sourceSets.getByName(defaultSourceSetName)
|
||||
|
||||
override fun defaultSourceSet(configure: KotlinSourceSet.() -> Unit) = defaultSourceSet.configure()
|
||||
|
||||
override fun source(sourceSet: KotlinSourceSet) {
|
||||
|
||||
+54
-83
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import com.android.build.gradle.api.BaseVariant
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.UnknownTaskException
|
||||
@@ -19,12 +20,8 @@ import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.KotlinCompilationsModuleGroups
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.kotlinAndroidSourceSetLayout
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.defaultSourceSetLanguageSettingsChecker
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
@@ -51,15 +48,17 @@ interface CompilationDetails<T : KotlinCommonOptions> {
|
||||
fun source(sourceSet: KotlinSourceSet)
|
||||
|
||||
val directlyIncludedKotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
|
||||
val allKotlinSourceSets: ObservableSet<KotlinSourceSet>
|
||||
val defaultSourceSetName: String
|
||||
|
||||
val defaultSourceSet: KotlinSourceSet
|
||||
|
||||
@Deprecated("Use defaultSourceSet.name instead", ReplaceWith("defaultSourceSet.name"), level = DeprecationLevel.WARNING)
|
||||
val defaultSourceSetName: String get() = defaultSourceSet.name
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val compilation: KotlinCompilation<T>
|
||||
get() = target.compilations.getByName(compilationData.compilationPurpose) as KotlinCompilation<T>
|
||||
|
||||
val defaultSourceSet: KotlinSourceSet
|
||||
get() = target.project.kotlinExtension.sourceSets.getByName(defaultSourceSetName)
|
||||
}
|
||||
|
||||
interface CompilationDetailsWithRuntime<T : KotlinCommonOptions> : CompilationDetails<T> {
|
||||
@@ -72,10 +71,9 @@ internal val CompilationDetails<*>.associateCompilationsClosure: Iterable<Compil
|
||||
open class DefaultCompilationDetails<T : KotlinCommonOptions>(
|
||||
final override val target: KotlinTarget,
|
||||
final override val compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> T
|
||||
) : AbstractCompilationDetails<T>(), KotlinCompilationData<T> {
|
||||
|
||||
override val kotlinOptions: T by lazy { createKotlinOptions() }
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
override val kotlinOptions: T
|
||||
) : AbstractCompilationDetails<T>(defaultSourceSet), KotlinCompilationData<T> {
|
||||
|
||||
final override val project: Project
|
||||
get() = target.project
|
||||
@@ -105,16 +103,6 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
|
||||
)
|
||||
)
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() = lowerCamelCaseName(
|
||||
target.disambiguationClassifier.takeIf { target !is KotlinMetadataTarget },
|
||||
when {
|
||||
isMainCompilationData() && target is KotlinMetadataTarget ->
|
||||
KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME // corner case: main compilation of the metadata target compiles commonMain
|
||||
else -> compilationPurpose
|
||||
}
|
||||
)
|
||||
|
||||
override val compilationClassifier: String?
|
||||
get() = target.disambiguationClassifier
|
||||
|
||||
@@ -141,7 +129,7 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
|
||||
)
|
||||
|
||||
override val languageSettings: LanguageSettings
|
||||
get() = project.kotlinExtension.sourceSets.getByName(defaultSourceSetName).languageSettings
|
||||
get() = defaultSourceSet.languageSettings
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = target.platformType
|
||||
@@ -325,8 +313,11 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
|
||||
open class DefaultCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> T
|
||||
) : DefaultCompilationDetails<T>(target, compilationPurpose, createKotlinOptions), CompilationDetailsWithRuntime<T> {
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
kotlinOptions: T
|
||||
) : DefaultCompilationDetails<T>(
|
||||
target, compilationPurpose, defaultSourceSet, kotlinOptions
|
||||
), CompilationDetailsWithRuntime<T> {
|
||||
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
lowerCamelCaseName(
|
||||
target.disambiguationClassifier,
|
||||
@@ -339,11 +330,13 @@ open class DefaultCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
|
||||
open class NativeCompilationDetails(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> KotlinCommonOptions
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
kotlinOptions: KotlinCommonOptions
|
||||
) : DefaultCompilationDetails<KotlinCommonOptions>(
|
||||
target,
|
||||
compilationPurpose,
|
||||
createKotlinOptions
|
||||
defaultSourceSet,
|
||||
kotlinOptions
|
||||
) {
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
lowerCamelCaseName(
|
||||
@@ -373,12 +366,14 @@ open class NativeCompilationDetails(
|
||||
internal open class SharedNativeCompilationDetails(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> KotlinCommonOptions
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
kotlinOptions: KotlinCommonOptions
|
||||
) :
|
||||
DefaultCompilationDetails<KotlinCommonOptions>(
|
||||
target,
|
||||
compilationPurpose,
|
||||
createKotlinOptions
|
||||
defaultSourceSet,
|
||||
kotlinOptions
|
||||
) {
|
||||
|
||||
override val friendArtifacts: FileCollection
|
||||
@@ -399,8 +394,9 @@ internal open class SharedNativeCompilationDetails(
|
||||
|
||||
internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
override val target: KotlinMetadataTarget,
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
final override val compilationData: AbstractKotlinFragmentMetadataCompilationData<T>
|
||||
) : AbstractCompilationDetails<T>() {
|
||||
) : AbstractCompilationDetails<T>(defaultSourceSet) {
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder =
|
||||
GradleKpmDependencyFilesHolder.ofMetadataCompilationDependencies(compilationData)
|
||||
|
||||
@@ -417,28 +413,18 @@ internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
override fun whenSourceSetAdded(sourceSet: KotlinSourceSet) {
|
||||
throw UnsupportedOperationException("metadata compilations have predefined sources")
|
||||
}
|
||||
|
||||
private val underlyingSourceSet: FragmentMappedKotlinSourceSet
|
||||
get() = target.project.kotlinExtension.sourceSets.withType<FragmentMappedKotlinSourceSet>().single {
|
||||
it.underlyingFragment == compilationData.fragment
|
||||
}
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() = underlyingSourceSet.name
|
||||
}
|
||||
|
||||
internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
open val variant: GradleKpmVariantInternal,
|
||||
override val target: KotlinTarget
|
||||
) : AbstractCompilationDetails<T>() {
|
||||
override val target: KotlinTarget,
|
||||
defaultSourceSet: FragmentMappedKotlinSourceSet,
|
||||
) : AbstractCompilationDetails<T>(defaultSourceSet) {
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override val compilationData: KotlinCompilationData<T>
|
||||
get() = variant.compilationData as KotlinCompilationData<T>
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() = variant.unambiguousNameInProject
|
||||
|
||||
override fun whenSourceSetAdded(sourceSet: KotlinSourceSet) {
|
||||
compilation.defaultSourceSet.dependsOn(sourceSet)
|
||||
}
|
||||
@@ -464,8 +450,9 @@ internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
|
||||
internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
|
||||
override val variant: GradleKpmVariantWithRuntimeInternal,
|
||||
target: KotlinTarget
|
||||
) : VariantMappedCompilationDetails<T>(variant, target),
|
||||
target: KotlinTarget,
|
||||
defaultSourceSet: FragmentMappedKotlinSourceSet
|
||||
) : VariantMappedCompilationDetails<T>(variant, target, defaultSourceSet),
|
||||
CompilationDetailsWithRuntime<T> {
|
||||
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
get() = GradleKpmDependencyFilesHolder.ofVariantRuntimeDependencies(variant)
|
||||
@@ -474,8 +461,9 @@ internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonO
|
||||
internal class WithJavaCompilationDetails<T : KotlinCommonOptions>(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> T
|
||||
) : DefaultCompilationDetailsWithRuntime<T>(target, compilationPurpose, createKotlinOptions) {
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
kotlinOptions: T
|
||||
) : DefaultCompilationDetailsWithRuntime<T>(target, compilationPurpose, defaultSourceSet, kotlinOptions) {
|
||||
override val compilation: KotlinWithJavaCompilation<T>
|
||||
get() = super.compilation as KotlinWithJavaCompilation<T>
|
||||
|
||||
@@ -506,24 +494,21 @@ internal class WithJavaCompilationDetails<T : KotlinCommonOptions>(
|
||||
class AndroidCompilationDetails(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
val androidVariant: BaseVariant,
|
||||
/** Workaround mutual creation order: a compilation is not added to the target's compilations collection until some point, pass it here */
|
||||
private val getCompilationInstance: () -> KotlinJvmAndroidCompilation
|
||||
) : DefaultCompilationDetailsWithRuntime<KotlinJvmOptions>(
|
||||
target,
|
||||
compilationPurpose,
|
||||
{ KotlinJvmOptionsImpl() }
|
||||
defaultSourceSet,
|
||||
KotlinJvmOptionsImpl()
|
||||
) {
|
||||
override val compilation: KotlinJvmAndroidCompilation get() = getCompilationInstance()
|
||||
|
||||
val androidVariant get() = compilation.androidVariant
|
||||
|
||||
override val friendArtifacts: FileCollection
|
||||
get() = target.project.files(super.friendArtifacts, compilation.testedVariantArtifacts)
|
||||
|
||||
override val defaultSourceSetName: String by lazy {
|
||||
project.kotlinAndroidSourceSetLayout.naming.defaultKotlinSourceSetName(this) ?: super.defaultSourceSetName
|
||||
}
|
||||
|
||||
/*
|
||||
* Example of how multiplatform dependencies from common would get to Android test classpath:
|
||||
* commonMainImplementation -> androidDebugImplementation -> debugImplementation -> debugAndroidTestCompileClasspath
|
||||
@@ -554,11 +539,16 @@ class AndroidCompilationDetails(
|
||||
}
|
||||
}
|
||||
|
||||
internal class MetadataCompilationDetails(target: KotlinTarget, name: String) :
|
||||
internal class MetadataCompilationDetails(
|
||||
target: KotlinTarget,
|
||||
name: String,
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
) :
|
||||
DefaultCompilationDetails<KotlinMultiplatformCommonOptions>(
|
||||
target,
|
||||
name,
|
||||
{ KotlinMultiplatformCommonOptionsImpl() }
|
||||
defaultSourceSet,
|
||||
KotlinMultiplatformCommonOptionsImpl()
|
||||
) {
|
||||
|
||||
override val friendArtifacts: FileCollection
|
||||
@@ -572,7 +562,10 @@ internal class MetadataCompilationDetails(target: KotlinTarget, name: String) :
|
||||
internal open class JsCompilationDetails(
|
||||
target: KotlinTarget,
|
||||
compilationPurpose: String,
|
||||
) : DefaultCompilationDetailsWithRuntime<KotlinJsOptions>(target, compilationPurpose, { KotlinJsOptionsImpl() }) {
|
||||
defaultSourceSet: KotlinSourceSet,
|
||||
) : DefaultCompilationDetailsWithRuntime<KotlinJsOptions>(
|
||||
target, compilationPurpose, defaultSourceSet, KotlinJsOptionsImpl()
|
||||
) {
|
||||
|
||||
internal abstract class JsCompilationDependenciesHolder @Inject constructor(
|
||||
val target: KotlinTarget,
|
||||
@@ -616,39 +609,17 @@ internal open class JsCompilationDetails(
|
||||
override val kotlinDependenciesHolder: HasKotlinDependencies
|
||||
get() = target.project.objects.newInstance(JsCompilationDependenciesHolder::class.java, target, compilationPurpose)
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() {
|
||||
val classifier = if (target is KotlinJsTarget && target.irTarget != null)
|
||||
target.disambiguationClassifierInPlatform
|
||||
else target.disambiguationClassifier
|
||||
|
||||
return lowerCamelCaseName(
|
||||
classifier,
|
||||
compilationPurpose
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
internal class JsIrCompilationDetails(target: KotlinTarget, compilationPurpose: String) :
|
||||
JsCompilationDetails(target, compilationPurpose) {
|
||||
internal class JsIrCompilationDetails(
|
||||
target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet
|
||||
) : JsCompilationDetails(target, compilationPurpose, defaultSourceSet) {
|
||||
|
||||
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
|
||||
super.addSourcesToCompileTask(sourceSet, addAsCommonSources)
|
||||
(compilation as KotlinJsIrCompilation).allSources.add(sourceSet.kotlin)
|
||||
}
|
||||
|
||||
override val defaultSourceSetName: String
|
||||
get() {
|
||||
val target = target as KotlinJsIrTarget
|
||||
return lowerCamelCaseName(
|
||||
if (target.mixedMode)
|
||||
target.disambiguationClassifierInPlatform
|
||||
else
|
||||
target.disambiguationClassifier,
|
||||
compilationPurpose
|
||||
)
|
||||
}
|
||||
|
||||
internal abstract class JsIrCompilationDependencyHolder @Inject constructor(target: KotlinTarget, compilationPurpose: String) :
|
||||
JsCompilationDependenciesHolder(target, compilationPurpose) {
|
||||
override val disambiguationClassifierInPlatform: String?
|
||||
|
||||
+27
-4
@@ -7,18 +7,41 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.NamedDomainObjectFactory
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
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.utils.lowerCamelCaseName
|
||||
|
||||
interface KotlinCompilationFactory<T : KotlinCompilation<*>> : NamedDomainObjectFactory<T> {
|
||||
val project: Project get() = target.project
|
||||
val target: KotlinTarget
|
||||
val itemClass: Class<T>
|
||||
|
||||
fun defaultSourceSetName(compilationName: String): String = lowerCamelCaseName(
|
||||
target.disambiguationClassifier.takeIf { target !is KotlinMetadataTarget },
|
||||
when {
|
||||
// corner case: main compilation of the metadata target compiles commonMain
|
||||
compilationName == KotlinCompilation.MAIN_COMPILATION_NAME &&
|
||||
target is KotlinMetadataTarget -> KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME
|
||||
|
||||
else -> compilationName
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
internal fun KotlinCompilationFactory<*>.getOrCreateDefaultSourceSet(compilationName: String): KotlinSourceSet {
|
||||
return project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName(compilationName))
|
||||
}
|
||||
|
||||
class KotlinCommonCompilationFactory(
|
||||
val target: KotlinOnlyTarget<*>
|
||||
override val target: KotlinOnlyTarget<*>
|
||||
) : KotlinCompilationFactory<KotlinCommonCompilation> {
|
||||
override val itemClass: Class<KotlinCommonCompilation>
|
||||
get() = KotlinCommonCompilation::class.java
|
||||
|
||||
override fun create(name: String): KotlinCommonCompilation =
|
||||
target.project.objects.newInstance(KotlinCommonCompilation::class.java, MetadataCompilationDetails(target, name))
|
||||
}
|
||||
override fun create(name: String): KotlinCommonCompilation = target.project.objects.newInstance(
|
||||
KotlinCommonCompilation::class.java, MetadataCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
|
||||
)
|
||||
}
|
||||
|
||||
-5
@@ -6,11 +6,6 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.execution.TaskExecutionListener
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.TaskState
|
||||
import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
|
||||
+5
-3
@@ -8,10 +8,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -62,7 +62,9 @@ internal class KotlinMappedJvmCompilationFactory(
|
||||
|
||||
return target.project.objects.newInstance(
|
||||
KotlinJvmCompilation::class.java,
|
||||
VariantMappedCompilationDetailsWithRuntime<KotlinJvmOptions>(variant, target)
|
||||
VariantMappedCompilationDetailsWithRuntime<KotlinJvmOptions>(
|
||||
variant, target, getOrCreateDefaultSourceSet(name) as FragmentMappedKotlinSourceSet
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -25,5 +25,5 @@ internal class GradleKpmNativeVariantCompilationData(
|
||||
override val owner: GradleKpmNativeVariant
|
||||
get() = variant
|
||||
|
||||
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
|
||||
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions(variant.languageSettings)
|
||||
}
|
||||
|
||||
+4
-2
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
abstract class GradleKpmNativeVariantInternal(
|
||||
@@ -57,7 +57,9 @@ internal class KotlinMappedNativeCompilationFactory(
|
||||
return target.project.objects.newInstance(
|
||||
KotlinNativeCompilation::class.java,
|
||||
target.konanTarget,
|
||||
VariantMappedCompilationDetails<KotlinCommonOptions>(variant, target)
|
||||
VariantMappedCompilationDetails<KotlinCommonOptions>(
|
||||
variant, target, getOrCreateDefaultSourceSet(name) as FragmentMappedKotlinSourceSet
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -10,9 +10,13 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
|
||||
@@ -78,7 +82,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
||||
project.provider { project.buildDir.resolve("processedResources/${fragment.disambiguateName("metadata")}") }
|
||||
)
|
||||
|
||||
override val languageSettings: LanguageSettingsBuilder = fragment.languageSettings
|
||||
final override val languageSettings: LanguageSettingsBuilder = fragment.languageSettings
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.common
|
||||
@@ -118,7 +122,8 @@ internal open class KotlinCommonFragmentMetadataCompilationDataImpl(
|
||||
module,
|
||||
compileAllTask,
|
||||
metadataCompilationRegistry,
|
||||
resolvedMetadataFiles), KotlinCommonFragmentMetadataCompilationData {
|
||||
resolvedMetadataFiles
|
||||
), KotlinCommonFragmentMetadataCompilationData {
|
||||
|
||||
override val isActive: Boolean
|
||||
get() = !fragment.isNativeShared() &&
|
||||
@@ -164,7 +169,7 @@ internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
|
||||
override val isActive: Boolean
|
||||
get() = fragment.isNativeShared() && fragment.containingVariants.count() > 1
|
||||
|
||||
override val kotlinOptions: NativeCompileOptions = NativeCompileOptions { languageSettings }
|
||||
override val kotlinOptions: NativeCompileOptions = NativeCompileOptions(languageSettings)
|
||||
|
||||
override val konanTarget: KonanTarget
|
||||
get() {
|
||||
|
||||
+3
-2
@@ -5,8 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.sources.android
|
||||
|
||||
import com.android.build.gradle.api.BaseVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.AndroidCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
|
||||
internal interface KotlinAndroidSourceSetNaming {
|
||||
|
||||
@@ -24,5 +25,5 @@ internal interface KotlinAndroidSourceSetNaming {
|
||||
* Returns `null`, if this naming schema does not know about it. In this case, the
|
||||
* 'default' defaultSourceSetName will be constructed by the compilation.
|
||||
*/
|
||||
fun defaultKotlinSourceSetName(compilation: AndroidCompilationDetails): String? = null
|
||||
fun defaultKotlinSourceSetName(target: KotlinAndroidTarget, variant: BaseVariant): String? = null
|
||||
}
|
||||
|
||||
+9
-8
@@ -5,8 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.sources.android
|
||||
|
||||
import com.android.build.gradle.api.BaseVariant
|
||||
import org.gradle.api.logging.Logging
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.AndroidCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
|
||||
internal object MultiplatformLayoutV2KotlinAndroidSourceSetNaming : KotlinAndroidSourceSetNaming {
|
||||
@@ -28,20 +29,20 @@ internal object MultiplatformLayoutV2KotlinAndroidSourceSetNaming : KotlinAndroi
|
||||
return lowerCamelCaseName(disambiguationClassifier, replaceAndroidBaseSourceSetName(androidSourceSetName, knownType))
|
||||
}
|
||||
|
||||
override fun defaultKotlinSourceSetName(compilation: AndroidCompilationDetails): String? {
|
||||
override fun defaultKotlinSourceSetName(target: KotlinAndroidTarget, variant: BaseVariant): String? {
|
||||
val kotlinSourceSetName: String? = run {
|
||||
val baseSourceSetName = compilation.androidVariant.type.androidBaseSourceSetName ?: return@run null
|
||||
val baseSourceSetName = variant.type.androidBaseSourceSetName ?: return@run null
|
||||
val androidSourceSetName = lowerCamelCaseName(
|
||||
baseSourceSetName.takeIf { it != AndroidBaseSourceSetName.Main }?.name,
|
||||
compilation.androidVariant.flavorName,
|
||||
compilation.androidVariant.buildType.name
|
||||
variant.flavorName,
|
||||
variant.buildType.name
|
||||
)
|
||||
val androidSourceSet = compilation.androidVariant.sourceSets.find { it.name == androidSourceSetName } ?: return@run null
|
||||
compilation.project.findKotlinSourceSet(androidSourceSet)?.name
|
||||
val androidSourceSet = variant.sourceSets.find { it.name == androidSourceSetName } ?: return@run null
|
||||
target.project.findKotlinSourceSet(androidSourceSet)?.name
|
||||
}
|
||||
|
||||
if (kotlinSourceSetName == null) {
|
||||
logger.warn("Can't determine 'defaultKotlinSourceSet' for android compilation: ${compilation.androidVariant.name}")
|
||||
logger.warn("Can't determine 'defaultKotlinSourceSet' for android compilation: ${variant.name}")
|
||||
}
|
||||
return kotlinSourceSetName
|
||||
}
|
||||
|
||||
+3
-3
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.gradle.logging.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSets.applyKotlinAndroidSourceSetLayout
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.findKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
@@ -74,14 +75,13 @@ internal class AndroidProjectHandler(
|
||||
androidPluginIds.joinToString("\n\t") { "* $it" })
|
||||
|
||||
project.forEachVariant { variant ->
|
||||
val compilationFactory = KotlinJvmAndroidCompilationFactory(kotlinAndroidTarget, variant)
|
||||
val variantName = getVariantName(variant)
|
||||
|
||||
// Create the compilation and configure it first, then add to the compilations container. As this code is executed
|
||||
// in afterEvaluate, a user's build script might have already attached item handlers to the compilations container, and those
|
||||
// handlers might break when fired on a compilation that is not yet properly configured (e.g. KT-29964):
|
||||
kotlinAndroidTarget.compilationFactory.create(variantName).let { compilation ->
|
||||
compilation.androidVariant = variant
|
||||
|
||||
compilationFactory.create(variantName).let { compilation ->
|
||||
setUpDependencyResolution(variant, compilation)
|
||||
|
||||
preprocessVariant(variant, compilation, project, kotlinOptions, kotlinConfigurationTools.kotlinTasksProvider)
|
||||
|
||||
+1
-3
@@ -29,10 +29,8 @@ abstract class KotlinAndroidTarget @Inject constructor(
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.androidJvm
|
||||
|
||||
internal val compilationFactory = KotlinJvmAndroidCompilationFactory(project, this)
|
||||
|
||||
override val compilations: NamedDomainObjectContainer<out KotlinJvmAndroidCompilation> =
|
||||
project.container(compilationFactory.itemClass, compilationFactory)
|
||||
project.container(KotlinJvmAndroidCompilation::class.java)
|
||||
|
||||
/** Names of the Android library variants that should be published from the target's project within the default publications which are
|
||||
* set up if the `maven-publish` Gradle plugin is applied.
|
||||
|
||||
+4
-8
@@ -6,17 +6,13 @@
|
||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||
|
||||
class KotlinJsCompilationFactory(
|
||||
val project: Project,
|
||||
val target: KotlinOnlyTarget<KotlinJsCompilation>,
|
||||
val irTarget: KotlinOnlyTarget<KotlinJsIrCompilation>?
|
||||
override val target: KotlinOnlyTarget<KotlinJsCompilation>,
|
||||
) : KotlinCompilationFactory<KotlinJsCompilation> {
|
||||
override val itemClass: Class<KotlinJsCompilation>
|
||||
get() = KotlinJsCompilation::class.java
|
||||
|
||||
override fun create(name: String): KotlinJsCompilation =
|
||||
target.project.objects.newInstance(KotlinJsCompilation::class.java, JsCompilationDetails(target, name))
|
||||
override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance(
|
||||
KotlinJsCompilation::class.java, JsCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
|
||||
)
|
||||
}
|
||||
+1
-1
@@ -96,7 +96,7 @@ open class KotlinJsTargetPreset(
|
||||
}
|
||||
|
||||
override fun createCompilationFactory(forTarget: KotlinJsTarget): KotlinJsCompilationFactory {
|
||||
return KotlinJsCompilationFactory(project, forTarget, irPreset?.let { forTarget.irTarget })
|
||||
return KotlinJsCompilationFactory(forTarget)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+3
-5
@@ -6,16 +6,14 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.JsIrCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dukat.ExternalsOutputFormat
|
||||
import javax.inject.Inject
|
||||
|
||||
abstract class KotlinJsIrCompilation @Inject constructor(
|
||||
target: KotlinTarget,
|
||||
name: String
|
||||
) : KotlinJsCompilation(JsIrCompilationDetails(target, name)) {
|
||||
abstract class KotlinJsIrCompilation @Inject internal constructor(
|
||||
compilationDetails: JsIrCompilationDetails
|
||||
) : KotlinJsCompilation(compilationDetails) {
|
||||
|
||||
override val externalsOutputFormat: ExternalsOutputFormat = ExternalsOutputFormat.SOURCE
|
||||
|
||||
|
||||
+18
-4
@@ -5,17 +5,31 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.JsIrCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
|
||||
class KotlinJsIrCompilationFactory(
|
||||
val project: Project,
|
||||
val target: KotlinOnlyTarget<KotlinJsIrCompilation>
|
||||
override val target: KotlinOnlyTarget<KotlinJsIrCompilation>
|
||||
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
|
||||
override val itemClass: Class<KotlinJsIrCompilation>
|
||||
get() = KotlinJsIrCompilation::class.java
|
||||
|
||||
override fun defaultSourceSetName(compilationName: String): String {
|
||||
val target = target as KotlinJsIrTarget
|
||||
return lowerCamelCaseName(
|
||||
if (target.mixedMode)
|
||||
target.disambiguationClassifierInPlatform
|
||||
else
|
||||
target.disambiguationClassifier,
|
||||
compilationName
|
||||
)
|
||||
}
|
||||
|
||||
override fun create(name: String): KotlinJsIrCompilation =
|
||||
target.project.objects.newInstance(KotlinJsIrCompilation::class.java, target, name)
|
||||
target.project.objects.newInstance(
|
||||
KotlinJsIrCompilation::class.java, JsIrCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
|
||||
)
|
||||
}
|
||||
+1
-1
@@ -80,7 +80,7 @@ open class KotlinJsIrTargetPreset(
|
||||
public override fun createCompilationFactory(
|
||||
forTarget: KotlinJsIrTarget
|
||||
): KotlinCompilationFactory<KotlinJsIrCompilation> =
|
||||
KotlinJsIrCompilationFactory(project, forTarget)
|
||||
KotlinJsIrCompilationFactory(forTarget)
|
||||
|
||||
companion object {
|
||||
val JS_PRESET_NAME = lowerCamelCaseName(
|
||||
|
||||
+4
-2
@@ -6,7 +6,9 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.PublicationRegistrationMode
|
||||
@@ -64,7 +66,7 @@ class KotlinWasmTargetPreset(
|
||||
public override fun createCompilationFactory(
|
||||
forTarget: KotlinJsIrTarget
|
||||
): KotlinCompilationFactory<KotlinJsIrCompilation> =
|
||||
KotlinJsIrCompilationFactory(project, forTarget)
|
||||
KotlinJsIrCompilationFactory(forTarget)
|
||||
|
||||
companion object {
|
||||
private const val WASM_PRESET_NAME = "wasm"
|
||||
|
||||
+4
-8
@@ -12,21 +12,17 @@ import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.getJavaTaskProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.getTestedVariantData
|
||||
import javax.inject.Inject
|
||||
|
||||
abstract class KotlinJvmAndroidCompilation @Inject constructor(
|
||||
compilationDetails: AndroidCompilationDetails
|
||||
final override val compilationDetails: AndroidCompilationDetails
|
||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinJvmOptions>(compilationDetails) {
|
||||
|
||||
lateinit var androidVariant: BaseVariant
|
||||
internal set
|
||||
val androidVariant: BaseVariant = compilationDetails.androidVariant
|
||||
|
||||
@Suppress("UnstableApiUsage")
|
||||
internal val testedVariantArtifacts: Property<FileCollection> = target.project.objects.property(FileCollection::class.java)
|
||||
internal val testedVariantArtifacts: Property<FileCollection> =
|
||||
compilationDetails.target.project.objects.property(FileCollection::class.java)
|
||||
|
||||
override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
+12
-4
@@ -6,20 +6,28 @@
|
||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import com.android.build.gradle.api.BaseVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.kotlinAndroidSourceSetLayout
|
||||
|
||||
class KotlinJvmAndroidCompilationFactory(
|
||||
val project: Project,
|
||||
val target: KotlinAndroidTarget
|
||||
override val target: KotlinAndroidTarget,
|
||||
private val variant: BaseVariant,
|
||||
) : KotlinCompilationFactory<KotlinJvmAndroidCompilation> {
|
||||
|
||||
override val itemClass: Class<KotlinJvmAndroidCompilation>
|
||||
get() = KotlinJvmAndroidCompilation::class.java
|
||||
|
||||
|
||||
override fun defaultSourceSetName(compilationName: String): String {
|
||||
return project.kotlinAndroidSourceSetLayout.naming.defaultKotlinSourceSetName(target, variant)
|
||||
?: super.defaultSourceSetName(compilationName)
|
||||
}
|
||||
|
||||
override fun create(name: String): KotlinJvmAndroidCompilation {
|
||||
lateinit var result: KotlinJvmAndroidCompilation
|
||||
val details = AndroidCompilationDetails(target, name) { result }
|
||||
val details = AndroidCompilationDetails(target, name, getOrCreateDefaultSourceSet(name), variant) { result }
|
||||
result = project.objects.newInstance(KotlinJvmAndroidCompilation::class.java, details)
|
||||
return result
|
||||
}
|
||||
|
||||
}
|
||||
+4
-2
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
|
||||
open class KotlinJvmCompilationFactory(
|
||||
val target: KotlinJvmTarget
|
||||
override val target: KotlinJvmTarget
|
||||
) : KotlinCompilationFactory<KotlinJvmCompilation> {
|
||||
override val itemClass: Class<KotlinJvmCompilation>
|
||||
get() = KotlinJvmCompilation::class.java
|
||||
@@ -18,6 +18,8 @@ open class KotlinJvmCompilationFactory(
|
||||
override fun create(name: String): KotlinJvmCompilation =
|
||||
target.project.objects.newInstance(
|
||||
KotlinJvmCompilation::class.java,
|
||||
DefaultCompilationDetailsWithRuntime(target, name) { KotlinJvmOptionsImpl() }
|
||||
DefaultCompilationDetailsWithRuntime(
|
||||
target, name, getOrCreateDefaultSourceSet(name), KotlinJvmOptionsImpl()
|
||||
)
|
||||
)
|
||||
}
|
||||
+5
-2
@@ -11,6 +11,7 @@ import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.utils.named
|
||||
import javax.inject.Inject
|
||||
@@ -18,9 +19,11 @@ import javax.inject.Inject
|
||||
abstract class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions> @Inject constructor(
|
||||
target: KotlinWithJavaTarget<KotlinOptionsType>,
|
||||
name: String,
|
||||
override val defaultSourceSet: KotlinSourceSet,
|
||||
kotlinOptions: KotlinOptionsType
|
||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinOptionsType>(WithJavaCompilationDetails(target, name) { kotlinOptions }),
|
||||
KotlinCompilationWithResources<KotlinOptionsType> {
|
||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinOptionsType>(
|
||||
WithJavaCompilationDetails(target, name, defaultSourceSet, kotlinOptions)
|
||||
), KotlinCompilationWithResources<KotlinOptionsType> {
|
||||
lateinit var javaSourceSet: SourceSet
|
||||
|
||||
override val processResourcesTaskName: String
|
||||
|
||||
+2
-3
@@ -6,12 +6,10 @@
|
||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
|
||||
class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions>(
|
||||
val project: Project,
|
||||
val target: KotlinWithJavaTarget<KotlinOptionsType>,
|
||||
override val target: KotlinWithJavaTarget<KotlinOptionsType>,
|
||||
val kotlinOptionsFactory: () -> KotlinOptionsType
|
||||
) : KotlinCompilationFactory<KotlinWithJavaCompilation<KotlinOptionsType>> {
|
||||
|
||||
@@ -25,6 +23,7 @@ class KotlinWithJavaCompilationFactory<KotlinOptionsType : KotlinCommonOptions>(
|
||||
KotlinWithJavaCompilation::class.java,
|
||||
target,
|
||||
name,
|
||||
getOrCreateDefaultSourceSet(name),
|
||||
kotlinOptionsFactory()
|
||||
) as KotlinWithJavaCompilation<KotlinOptionsType>
|
||||
}
|
||||
+1
-1
@@ -44,7 +44,7 @@ abstract class KotlinWithJavaTarget<KotlinOptionsType : KotlinCommonOptions> @In
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
project.container(
|
||||
KotlinWithJavaCompilation::class.java as Class<KotlinWithJavaCompilation<KotlinOptionsType>>,
|
||||
KotlinWithJavaCompilationFactory(project, this, kotlinOptionsFactory)
|
||||
KotlinWithJavaCompilationFactory(this, kotlinOptionsFactory)
|
||||
)
|
||||
|
||||
private val layout = project.layout
|
||||
|
||||
+5
-5
@@ -7,13 +7,11 @@ package org.jetbrains.kotlin.gradle.targets.metadata
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataMappedCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmAwareTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.metadataCompilationRegistryByModuleId
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
|
||||
|
||||
@@ -45,7 +43,8 @@ internal class GradleKpmMetadataTargetConfigurator(private val metadataTargetCon
|
||||
val compilationData = metadataCompilations.getForFragmentOrNull(fragment) ?: return@forEach
|
||||
if (!compilationData.isActive) return@forEach
|
||||
|
||||
val compilationDetails = MetadataMappedCompilationDetails(target, compilationData)
|
||||
val defaultSourceSet = target.project.kotlinExtension.sourceSets.maybeCreate(fragment.unambiguousNameInProject)
|
||||
val compilationDetails = MetadataMappedCompilationDetails(target, defaultSourceSet, compilationData)
|
||||
|
||||
val isNative = compilationData is KotlinNativeFragmentMetadataCompilationData
|
||||
|
||||
@@ -60,6 +59,7 @@ internal class GradleKpmMetadataTargetConfigurator(private val metadataTargetCon
|
||||
compilationDetails as CompilationDetails<KotlinCommonOptions>
|
||||
)
|
||||
}
|
||||
|
||||
else -> target.project.objects
|
||||
.newInstance(
|
||||
KotlinCommonCompilation::class.java,
|
||||
|
||||
+1
-2
@@ -21,8 +21,7 @@ import java.io.File
|
||||
import java.util.concurrent.Callable
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class NativeCompileOptions(languageSettingsProvider: () -> LanguageSettingsBuilder) : KotlinCommonOptions {
|
||||
private val languageSettings: LanguageSettingsBuilder by lazy(languageSettingsProvider)
|
||||
internal class NativeCompileOptions(private val languageSettings: LanguageSettingsBuilder) : KotlinCommonOptions {
|
||||
|
||||
override var apiVersion: String?
|
||||
get() = languageSettings.apiVersion
|
||||
|
||||
+18
-12
@@ -9,36 +9,42 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
open class KotlinNativeCompilationFactory(
|
||||
val target: KotlinNativeTarget
|
||||
override val target: KotlinNativeTarget
|
||||
) : KotlinCompilationFactory<KotlinNativeCompilation> {
|
||||
|
||||
override val itemClass: Class<KotlinNativeCompilation>
|
||||
get() = KotlinNativeCompilation::class.java
|
||||
|
||||
override fun create(name: String): KotlinNativeCompilation =
|
||||
// TODO: Validate compilation free args using the [CompilationFreeArgsValidator]
|
||||
// when the compilation and the link args are separated (see KT-33717).
|
||||
// Note: such validation should be done in the whenEvaluate block because
|
||||
override fun create(name: String): KotlinNativeCompilation {
|
||||
// TODO: Validate compilation free args using the [CompilationFreeArgsValidator]
|
||||
// when the compilation and the link args are separated (see KT-33717).
|
||||
// Note: such validation should be done in the whenEvaluate block because
|
||||
// a user can change args during project configuration.
|
||||
|
||||
target.project.objects.newInstance(
|
||||
val defaultSourceSet = getOrCreateDefaultSourceSet(name)
|
||||
return target.project.objects.newInstance(
|
||||
KotlinNativeCompilation::class.java,
|
||||
target.konanTarget,
|
||||
NativeCompilationDetails(target, name) { NativeCompileOptions { defaultSourceSet.languageSettings } }
|
||||
NativeCompilationDetails(
|
||||
target, name, defaultSourceSet, NativeCompileOptions(defaultSourceSet.languageSettings)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinSharedNativeCompilationFactory(
|
||||
val target: KotlinMetadataTarget,
|
||||
override val target: KotlinMetadataTarget,
|
||||
val konanTargets: List<KonanTarget>
|
||||
): KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||
) : KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||
override val itemClass: Class<KotlinSharedNativeCompilation>
|
||||
get() = KotlinSharedNativeCompilation::class.java
|
||||
|
||||
override fun create(name: String): KotlinSharedNativeCompilation =
|
||||
target.project.objects.newInstance(
|
||||
override fun create(name: String): KotlinSharedNativeCompilation {
|
||||
val defaultSourceSet = getOrCreateDefaultSourceSet(name)
|
||||
return target.project.objects.newInstance(
|
||||
KotlinSharedNativeCompilation::class.java,
|
||||
konanTargets,
|
||||
SharedNativeCompilationDetails(target, name) { NativeCompileOptions { defaultSourceSet.languageSettings } }
|
||||
SharedNativeCompilationDetails(target, name, defaultSourceSet, NativeCompileOptions(defaultSourceSet.languageSettings))
|
||||
)
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -14,7 +14,6 @@ import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.gradle.applyMultiplatformPlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.forEachVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.AndroidCompilationDetails
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.*
|
||||
import org.jetbrains.kotlin.gradle.setMultiplatformAndroidSourceSetLayoutVersion
|
||||
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||
@@ -271,11 +270,12 @@ class MultiplatformAndroidSourceSetLayoutV2Test {
|
||||
project.evaluate()
|
||||
|
||||
kotlin.android().compilations.all { compilation ->
|
||||
val compilationDetails = compilation.compilationDetails as AndroidCompilationDetails
|
||||
val defaultKotlinSourceSetName = multiplatformAndroidSourceSetLayoutV2.naming.defaultKotlinSourceSetName(compilationDetails)
|
||||
val defaultKotlinSourceSetName = multiplatformAndroidSourceSetLayoutV2.naming
|
||||
.defaultKotlinSourceSetName(kotlin.android(), compilation.androidVariant)
|
||||
|
||||
assertNotNull(
|
||||
defaultKotlinSourceSetName,
|
||||
"Expected non-null 'defaultKotlinSourceSetName' for compilation ${compilationDetails.compilation.name}"
|
||||
"Expected non-null 'defaultKotlinSourceSetName' for compilation ${compilation.name}"
|
||||
)
|
||||
|
||||
val kotlinSourceSet = kotlin.sourceSets.getByName(defaultKotlinSourceSetName)
|
||||
|
||||
Reference in New Issue
Block a user