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