diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AbstractCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AbstractCompilationDetails.kt deleted file mode 100644 index 87e0e7b9857..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AbstractCompilationDetails.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.mpp.CompilationDetails -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 - -internal abstract class AbstractCompilationDetails( - final override val defaultSourceSet: KotlinSourceSet -) : CompilationDetails { - private val directlyIncludedKotlinSourceSetsImpl: MutableObservableSet = MutableObservableSetImpl(defaultSourceSet) - - final override val kotlinSourceSets: ObservableSet - get() = directlyIncludedKotlinSourceSetsImpl - - private val allKotlinSourceSetsImpl: MutableObservableSet = MutableObservableSetImpl().also { set -> - defaultSourceSet.internal.withDependsOnClosure.forAll(set::add) - } - - final override val allKotlinSourceSets: ObservableSet - get() = allKotlinSourceSetsImpl - - /** - * All SourceSets that have been processed by [source] already. - * [directlyIncludedKotlinSourceSets] cannot be used in this case, because - * the [defaultSourceSet] will always be already included. - */ - private val sourcedKotlinSourceSets = hashSetOf() - - final override fun source(sourceSet: KotlinSourceSet) { - if (!sourcedKotlinSourceSets.add(sourceSet)) return - directlyIncludedKotlinSourceSetsImpl.add(sourceSet) - sourceSet.internal.withDependsOnClosure.forAll { inDependsOnClosure -> - allKotlinSourceSetsImpl.add(inDependsOnClosure) - inDependsOnClosure.internal.compilations.add(compilation) - } - - whenSourceSetAdded(sourceSet) - } - - /** - * Called after [sourceSet] added the [sourceSet] to its respective ObservableSet's - */ - protected open fun whenSourceSetAdded(sourceSet: KotlinSourceSet) = Unit -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AndroidCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AndroidCompilationDetails.kt deleted file mode 100644 index cf63d11fcb2..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/AndroidCompilationDetails.kt +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import com.android.build.gradle.api.BaseVariant -import org.gradle.api.file.FileCollection -import org.jetbrains.kotlin.gradle.dsl.CompilerJvmOptions -import org.jetbrains.kotlin.gradle.dsl.CompilerJvmOptionsDefault -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions -import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation - -internal 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( - target, - compilationPurpose, - defaultSourceSet, - { - object : HasCompilerOptions { - override val options: CompilerJvmOptions = - target.project.objects.newInstance(CompilerJvmOptionsDefault::class.java) - } - }, - { - object : KotlinJvmOptions { - override val options: CompilerJvmOptions - get() = compilerOptions.options - } - } -) { - override val compilation: KotlinJvmAndroidCompilation get() = getCompilationInstance() - - override val friendArtifacts: FileCollection - get() = target.project.files(super.friendArtifacts, compilation.testedVariantArtifacts) - - /* - * Example of how multiplatform dependencies from common would get to Android test classpath: - * commonMainImplementation -> androidDebugImplementation -> debugImplementation -> debugAndroidTestCompileClasspath - * After the fix for KT-35916 MPP compilation configurations receive a 'compilation' postfix for disambiguation. - * androidDebugImplementation remains a source set configuration, but no longer contains compilation dependencies. - * Therefore, it doesn't get dependencies from common source sets. - * We now explicitly add associate compilation dependencies to the Kotlin test compilation configurations (test classpaths). - * This helps, because the Android test classpath configurations extend from the Kotlin test compilations' directly. - */ - override fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) { - compilation.compileDependencyConfigurationName.addAllDependenciesFromOtherConfigurations( - project, - other.apiConfigurationName, - other.implementationConfigurationName, - other.compileOnlyConfigurationName - ) - } - - override val kotlinDependenciesHolder: HasKotlinDependencies - get() = object : HasKotlinDependencies by super.kotlinDependenciesHolder { - override val relatedConfigurationNames: List - get() = super.relatedConfigurationNames + listOf( - "${androidVariant.name}ApiElements", - "${androidVariant.name}RuntimeElements", - androidVariant.compileConfiguration.name, - androidVariant.runtimeConfiguration.name - ) - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetails.kt deleted file mode 100644 index 9795598c4fb..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetails.kt +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.gradle.api.Project -import org.gradle.api.UnknownTaskException -import org.gradle.api.artifacts.Dependency -import org.gradle.api.file.FileCollection -import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.AbstractArchiveTask -import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.mpp.* -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationModuleManager -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationModuleManager.CompilationModule.Type -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.kotlinCompilationModuleManager -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder -import org.jetbrains.kotlin.gradle.plugin.sources.defaultSourceSetLanguageSettingsChecker -import org.jetbrains.kotlin.gradle.plugin.sources.internal -import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure -import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName -import org.jetbrains.kotlin.project.model.LanguageSettings -import java.util.* -import java.util.concurrent.Callable - -internal open class DefaultCompilationDetails( - final override val target: KotlinTarget, - final override val compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, - createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, - createKotlinOptions: DefaultCompilationDetails.() -> T -) : AbstractCompilationDetails(defaultSourceSet), KotlinCompilationData { - - override val compilerOptions: HasCompilerOptions by lazy { createCompilerOptions() } - - @Deprecated("Replaced with compilerOptions.options", replaceWith = ReplaceWith("compilerOptions.options")) - override val kotlinOptions: T by lazy { createKotlinOptions() } - - final override val project: Project - get() = target.project - - override val owner: KotlinTarget - get() = target - - override val compilationData: KotlinCompilationData - get() = this - - override val kotlinDependenciesHolder: HasKotlinDependencies - get() = project.objects.newInstance( - KotlinDependencyConfigurationsHolder::class.java, - project, - lowerCamelCaseName( - target.disambiguationClassifier, - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - "compilation", - ) - ) - - override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( - lowerCamelCaseName( - target.disambiguationClassifier, - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(), - "compileClasspath" - ) - ) - - override val compilationClassifier: String? - get() = target.disambiguationClassifier - - override val kotlinSourceDirectoriesByFragmentName: Map - get() = kotlinSourceSets.withDependsOnClosure.associate { it.name to it.kotlin } - - override val compileKotlinTaskName: String - get() = lowerCamelCaseName( - "compile", - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - "Kotlin", - target.targetName - ) - - override val compileAllTaskName: String - get() = lowerCamelCaseName(target.disambiguationClassifier, compilationPurpose, "classes") - - override val compileDependencyFiles: FileCollection - get() = compileDependencyFilesHolder.dependencyFiles - - override val output: KotlinCompilationOutput = DefaultKotlinCompilationOutput( - target.project, - Callable { target.project.buildDir.resolve("processedResources/${target.targetName}/$compilationPurpose") } - ) - - override val languageSettings: LanguageSettings - get() = defaultSourceSet.languageSettings - - override val platformType: KotlinPlatformType - get() = target.platformType - - private val compilationModule = KotlinCompilationModuleManager.CompilationModule( - ownModuleName = project.provider { - val baseName = project.archivesName.orNull - ?: project.name - val suffix = if (isMainCompilationData()) "" else "_$compilationPurpose" - filterModuleName("$baseName$suffix") - }, - compilationName = compilationPurpose, - type = if (isMainCompilationData()) Type.Main else Type.Auxiliary - ) - - override val moduleName: String - get() = project.kotlinCompilationModuleManager.getModuleLeader(compilationModule).ownModuleName.get() - - override val ownModuleName: String - get() = compilationModule.ownModuleName.get() - - override val friendPaths: Iterable - get() = mutableListOf().also { allCollections -> - associateCompilationsClosure.forEach { allCollections.add(it.compilationData.output.classesDirs) } - allCollections.add(friendArtifacts) - } - - private val friendArtifactsTask: TaskProvider? by lazy { - if (associateCompilationsClosure.any { it.compilationData.isMainCompilationData() }) { - val archiveTasks = target.project.tasks.withType(AbstractArchiveTask::class.java) - if (!archiveTasks.isEmpty()) { - try { - archiveTasks.named(target.artifactsTaskName) - } catch (e: UnknownTaskException) { - // Native tasks does not extend AbstractArchiveTask - null - } - } else { - null - } - } else { - null - } - } - - /** - * If a compilation is aware of its associate compilations' outputs being added to the classpath in a transformed or packaged way, - * it should point to those friend artifact files via this property. - */ - internal open val friendArtifacts: FileCollection - get() = with(target.project) { - val friendArtifactsTaskProvider = friendArtifactsTask - if (friendArtifactsTaskProvider != null) { - // In case the main artifact is transitively added to the test classpath via a test dependency on another module - // that depends on this module's production part, include the main artifact in the friend artifacts, lazily: - files( - Callable { - friendArtifactsTaskProvider.flatMap { it.archiveFile } - } - ) - } else files() - } - - override val associateCompilations: Set> - get() = Collections.unmodifiableSet(_associateCompilations) - - private val _associateCompilations = mutableSetOf>() - - override fun associateWith(other: CompilationDetails<*>) { - require(other.target == target) { "Only associations between compilations of a single target are supported" } - _associateCompilations += other - addAssociateCompilationDependencies(other.compilation) - project.kotlinCompilationModuleManager.unionModules(this.compilationModule, other.compilation.internal.compilationModule) - _associateCompilations.add(other) - } - - @OptIn(ExperimentalStdlibApi::class) - protected open fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) = with(compilationData) { - /* - we add dependencies to compileDependencyConfiguration ('compileClasspath' usually) and runtimeDependency - ('runtimeClasspath') instead of modifying respective api/implementation/compileOnly/runtimeOnly configs - - This is needed because api/implementation/compileOnly/runtimeOnly are used in IDE Import and will leak - to dependencies of IDE modules. But they are not needed here, because IDE resolution works inherently - transitively and symbols from associated compilation will be resolved from source sets of associated - compilation itself (moreover, direct dependencies are not equivalent to transitive ones because of - resolution order - e.g. in case of FQNs clash, so it's even harmful) - */ - project.dependencies.add(compilation.compileOnlyConfigurationName, project.files(Callable { other.output.classesDirs })) - project.dependencies.add(compilation.runtimeOnlyConfigurationName, project.files(Callable { other.output.allOutputs })) - - compilation.compileDependencyConfigurationName.addAllDependenciesFromOtherConfigurations( - project, - other.apiConfigurationName, - other.implementationConfigurationName, - other.compileOnlyConfigurationName - ) - - compilation.runtimeDependencyConfigurationName?.addAllDependenciesFromOtherConfigurations( - project, - other.apiConfigurationName, - other.implementationConfigurationName, - other.runtimeOnlyConfigurationName - ) - } - - /** - * Adds `allDependencies` of configurations mentioned in `configurationNames` to configuration named [this] in - * a lazy manner - */ - protected fun String.addAllDependenciesFromOtherConfigurations(project: Project, vararg configurationNames: String) { - project.configurations.named(this).configure { receiverConfiguration -> - receiverConfiguration.dependencies.addAllLater( - project.objects.listProperty(Dependency::class.java).apply { - set( - project.provider { - configurationNames - .map { project.configurations.getByName(it) } - .flatMap { it.allDependencies } - } - ) - } - ) - } - } - - override fun whenSourceSetAdded(sourceSet: KotlinSourceSet) { - sourceSet.internal.withDependsOnClosure.forAll { inWithDependsOnClosure -> - addExactSourceSetEagerly(inWithDependsOnClosure) - } - } - - open fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) = - addSourcesToKotlinCompileTask( - project, - compileKotlinTaskName, - sourceSet.customSourceFilesExtensions, - addAsCommonSources - ) { sourceSet.kotlin } - - - private val sourceSetsAddedEagerly = hashSetOf() - - internal fun addExactSourceSetEagerly(sourceSet: KotlinSourceSet) { - if (!sourceSetsAddedEagerly.add(sourceSet)) return - - with(target.project) { - //TODO possibly issue with forced instantiation - addSourcesToCompileTask( - sourceSet, - addAsCommonSources = lazy { - target.project.kotlinExtension.sourceSets.any { otherSourceSet -> - sourceSet in otherSourceSet.dependsOn - } - } - ) - - // Use `forced = false` since `api`, `implementation`, and `compileOnly` may be missing in some cases like - // old Java & Android projects: - addExtendsFromRelation(compilation.apiConfigurationName, sourceSet.apiConfigurationName, forced = false) - addExtendsFromRelation( - compilation.implementationConfigurationName, - sourceSet.implementationConfigurationName, - forced = false - ) - addExtendsFromRelation(compilation.compileOnlyConfigurationName, sourceSet.compileOnlyConfigurationName, forced = false) - - if (compilation is KotlinCompilationToRunnableFiles<*>) { - addExtendsFromRelation(compilation.runtimeOnlyConfigurationName, sourceSet.runtimeOnlyConfigurationName, forced = false) - } - - if (sourceSet.name != defaultSourceSetName) { - kotlinExtension.sourceSets.findByName(defaultSourceSetName)?.let { defaultSourceSet -> - // Temporary solution for checking consistency across source sets participating in a compilation that may - // not be interconnected with the dependsOn relation: check the settings as if the default source set of - // the compilation depends on the one added to the compilation: - defaultSourceSetLanguageSettingsChecker.runAllChecks( - defaultSourceSet, - sourceSet - ) - } - } - } - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetailsWithRuntime.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetailsWithRuntime.kt deleted file mode 100644 index 93fc1fd3662..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/DefaultCompilationDetailsWithRuntime.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.CompilationDetailsWithRuntime -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName - -internal open class DefaultCompilationDetailsWithRuntime( - target: KotlinTarget, - compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, - createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, - createKotlinOptions: DefaultCompilationDetails.() -> T -) : DefaultCompilationDetails( - target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions -), CompilationDetailsWithRuntime { - override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( - lowerCamelCaseName( - target.disambiguationClassifier, - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(), - "runtimeClasspath" - ) - ) -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt deleted file mode 100644 index c55d1d8ac31..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.gradle.api.Action -import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptions -import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault -import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions -import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinDependencyHandler -import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget -import org.jetbrains.kotlin.gradle.utils.* -import javax.inject.Inject - -internal open class JsCompilationDetails( - target: KotlinTarget, - compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, -) : DefaultCompilationDetailsWithRuntime( - target, - compilationPurpose, - defaultSourceSet, - { - object : HasCompilerOptions { - override val options: CompilerJsOptions = - target.project.objects.newInstance(CompilerJsOptionsDefault::class.java) - } - }, - { - object : KotlinJsOptions { - override val options: CompilerJsOptions - get() = compilerOptions.options - } - } -) { - - internal abstract class JsCompilationDependenciesHolder @Inject constructor( - val target: KotlinTarget, - val compilationName: String - ) : HasKotlinDependencies { - override val apiConfigurationName: String - get() = disambiguateNameInPlatform(API) - - override val implementationConfigurationName: String - get() = disambiguateNameInPlatform(IMPLEMENTATION) - - override val compileOnlyConfigurationName: String - get() = disambiguateNameInPlatform(COMPILE_ONLY) - - override val runtimeOnlyConfigurationName: String - get() = disambiguateNameInPlatform(RUNTIME_ONLY) - - protected open val disambiguationClassifierInPlatform: String? - get() = when (target) { - is KotlinJsTarget -> target.disambiguationClassifierInPlatform - is KotlinJsIrTarget -> target.disambiguationClassifierInPlatform - else -> error("Unexpected target type of $target") - } - - private fun disambiguateNameInPlatform(simpleName: String): String { - return lowerCamelCaseName( - disambiguationClassifierInPlatform, - compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - "compilation", - simpleName - ) - } - - override fun dependencies(configure: KotlinDependencyHandler.() -> Unit): Unit = - DefaultKotlinDependencyHandler(this, target.project).run(configure) - - override fun dependencies(configure: Action) = - dependencies { configure.execute(this) } - } - - override val kotlinDependenciesHolder: HasKotlinDependencies - get() = target.project.objects.newInstance(JsCompilationDependenciesHolder::class.java, target, compilationPurpose) - -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsIrCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsIrCompilationDetails.kt deleted file mode 100644 index ccc0ea0732e..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsIrCompilationDetails.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget -import javax.inject.Inject - -internal class JsIrCompilationDetails( - target: KotlinTarget, compilationPurpose: String, defaultSourceSet: KotlinSourceSet -) : JsCompilationDetails(target, compilationPurpose, defaultSourceSet) { - - internal abstract class JsIrCompilationDependencyHolder @Inject constructor(target: KotlinTarget, compilationPurpose: String) : - JsCompilationDependenciesHolder(target, compilationPurpose) { - override val disambiguationClassifierInPlatform: String? - get() = (target as KotlinJsIrTarget).disambiguationClassifierInPlatform - } - - override val kotlinDependenciesHolder: HasKotlinDependencies - get() = target.project.objects.newInstance(JsIrCompilationDependencyHolder::class.java, target, compilationPurpose) -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/MetadataCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/MetadataCompilationDetails.kt deleted file mode 100644 index 78635f63952..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/MetadataCompilationDetails.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.gradle.api.file.FileCollection -import org.jetbrains.kotlin.gradle.dsl.CompilerMultiplatformCommonOptions -import org.jetbrains.kotlin.gradle.dsl.CompilerMultiplatformCommonOptionsDefault -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptions -import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations - -internal class MetadataCompilationDetails( - target: KotlinTarget, - name: String, - defaultSourceSet: KotlinSourceSet, -) : DefaultCompilationDetails( - target, - name, - defaultSourceSet, - { - object : HasCompilerOptions { - override val options: CompilerMultiplatformCommonOptions = - target.project.objects.newInstance(CompilerMultiplatformCommonOptionsDefault::class.java) - } - }, - { - object : KotlinMultiplatformCommonOptions { - override val options: CompilerMultiplatformCommonOptions - get() = compilerOptions.options - } - } -) { - - override val friendArtifacts: FileCollection - get() = super.friendArtifacts.plus(run { - val project = target.project - val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(defaultSourceSet) - project.files(friendSourceSets.mapNotNull { target.compilations.findByName(it.name)?.output?.classesDirs }) - }) -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/NativeCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/NativeCompilationDetails.kt deleted file mode 100644 index c80842eb210..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/NativeCompilationDetails.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.addSourcesToKotlinNativeCompileTask -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder -import org.jetbrains.kotlin.gradle.utils.filesProvider -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName - -internal open class NativeCompilationDetails( - target: KotlinTarget, - compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, - @Suppress("DEPRECATION") - createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, - @Suppress("DEPRECATION") - createKotlinOptions: DefaultCompilationDetails.() -> KotlinCommonOptions -) : DefaultCompilationDetails( - target, - compilationPurpose, - defaultSourceSet, - createCompilerOptions, - createKotlinOptions -) { - override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder( - lowerCamelCaseName( - target.disambiguationClassifier, - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(), - "compileKlibraries" - ) - ) - - override val compileAllTaskName: String - get() = lowerCamelCaseName(target.disambiguationClassifier, compilationPurpose, "klibrary") - - override fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) { - compileDependencyFilesHolder.dependencyFiles += - other.output.classesDirs + project.filesProvider { other.compileDependencyFiles } - - target.project.configurations.named(compilation.implementationConfigurationName).configure { configuration -> - configuration.extendsFrom(target.project.configurations.findByName(other.implementationConfigurationName)) - } - } - - override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) { - addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources) - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/SharedNativeCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/SharedNativeCompilationDetails.kt deleted file mode 100644 index 6dd1d10eb5b..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/SharedNativeCompilationDetails.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.gradle.api.file.FileCollection -import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.addSourcesToKotlinNativeCompileTask -import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations -import org.jetbrains.kotlin.gradle.plugin.sources.internal -import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet - -internal open class SharedNativeCompilationDetails( - target: KotlinTarget, - compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, - @Suppress("DEPRECATION") - createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, - @Suppress("DEPRECATION") - createKotlinOptions: DefaultCompilationDetails.() -> KotlinCommonOptions -) : DefaultCompilationDetails( - target, - compilationPurpose, - defaultSourceSet, - createCompilerOptions, - createKotlinOptions -) { - - override val friendArtifacts: FileCollection - get() = super.friendArtifacts.plus(run { - val project = target.project - val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(defaultSourceSet).toMutableSet().apply { - // TODO: implement proper dependsOn/refines compiler args for Kotlin/Native and pass the dependsOn klibs separately; - // But for now, those dependencies don't have any special semantics, so passing all them as friends works, too - addAll(defaultSourceSet.internal.dependsOnClosure) - } - project.files(friendSourceSets.mapNotNull { project.getMetadataCompilationForSourceSet(it)?.output?.classesDirs }) - }) - - override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) { - addSourcesToKotlinNativeCompileTask(project, compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources) - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/WithJavaCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/WithJavaCompilationDetails.kt deleted file mode 100644 index 57cddd99f23..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/WithJavaCompilationDetails.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl - -import org.gradle.api.file.FileCollection -import org.gradle.api.tasks.SourceSet -import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilationOutput -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmDependencyFilesHolder - -internal class WithJavaCompilationDetails( - target: KotlinTarget, - compilationPurpose: String, - defaultSourceSet: KotlinSourceSet, - createCompilerOptions: DefaultCompilationDetails.() -> HasCompilerOptions, - createKotlinOptions: DefaultCompilationDetails.() -> T -) : DefaultCompilationDetailsWithRuntime(target, compilationPurpose, defaultSourceSet, createCompilerOptions, createKotlinOptions) { - @Suppress("UNCHECKED_CAST") - override val compilation: KotlinWithJavaCompilation - get() = super.compilation as KotlinWithJavaCompilation - - val javaSourceSet: SourceSet - get() = compilation.javaSourceSet - - override val output: KotlinCompilationOutput = KotlinWithJavaCompilationOutput(compilation.javaSourceSet) - - override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder - get() = object : GradleKpmDependencyFilesHolder { - override val dependencyConfigurationName: String by javaSourceSet::compileClasspathConfigurationName - override var dependencyFiles: FileCollection by javaSourceSet::compileClasspath - } - - override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder - get() = object : GradleKpmDependencyFilesHolder { - override val dependencyConfigurationName: String by javaSourceSet::runtimeClasspathConfigurationName - override var dependencyFiles: FileCollection by javaSourceSet::runtimeClasspath - } - - override fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) { - if (compilationPurpose != SourceSet.TEST_SOURCE_SET_NAME || other.name != SourceSet.MAIN_SOURCE_SET_NAME) { - super.addAssociateCompilationDependencies(other) - } // otherwise, do nothing: the Java Gradle plugin adds these dependencies for us, we don't need to add them to the classpath - } -} \ No newline at end of file