[Gradle][MPP][Minor] kotlinCompilations.kt: Extract abstract classes into separate files
This shall increase readability and maintainablity. KT-52726
This commit is contained in:
committed by
Space
parent
1c52f7c13b
commit
1d41a1cde7
+120
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.attributes.AttributeContainer
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.project.model.LanguageSettings
|
||||
import java.util.*
|
||||
|
||||
abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
|
||||
internal open val compilationDetails: CompilationDetails<T>,
|
||||
) : KotlinCompilation<T>,
|
||||
HasKotlinDependencies,
|
||||
KotlinCompilationData<T> {
|
||||
|
||||
//region HasKotlinDependencies delegation: delegate members manually for better control and prevention of accidental overrides
|
||||
private val kotlinDependenciesHolder get() = compilationDetails.kotlinDependenciesHolder
|
||||
override val apiConfigurationName: String get() = kotlinDependenciesHolder.apiConfigurationName
|
||||
override val implementationConfigurationName: String get() = kotlinDependenciesHolder.implementationConfigurationName
|
||||
override val compileOnlyConfigurationName: String get() = kotlinDependenciesHolder.compileOnlyConfigurationName
|
||||
override val runtimeOnlyConfigurationName: String get() = kotlinDependenciesHolder.runtimeOnlyConfigurationName
|
||||
final override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) = kotlinDependenciesHolder.dependencies(configure)
|
||||
final override fun dependencies(configure: Action<KotlinDependencyHandler>) = dependencies { configure.execute(this) }
|
||||
//endregion
|
||||
|
||||
//region KotlinCompilationData delegation: delegate members manually for better control and prevention of accidental overrides
|
||||
private val compilationData get() = compilationDetails.compilationData
|
||||
override val compileAllTaskName: String get() = compilationData.compileAllTaskName
|
||||
final override val compilationPurpose: String get() = compilationData.compilationPurpose
|
||||
final override val compilationClassifier: String? get() = compilationData.compilationClassifier
|
||||
final override val languageSettings: LanguageSettings get() = compilationData.languageSettings
|
||||
final override val ownModuleName: String get() = compilationData.ownModuleName
|
||||
final override val moduleName: String get() = compilationData.moduleName
|
||||
final override val friendPaths: Iterable<FileCollection> get() = compilationData.friendPaths
|
||||
final override val platformType: KotlinPlatformType get() = compilationData.platformType
|
||||
final override val output: KotlinCompilationOutput get() = compilationData.output
|
||||
final override val compileKotlinTaskName: String get() = compilationData.compileKotlinTaskName
|
||||
final override val kotlinOptions: T get() = compilationData.kotlinOptions
|
||||
final override val kotlinSourceDirectoriesByFragmentName get() = compilationData.kotlinSourceDirectoriesByFragmentName
|
||||
//endregion
|
||||
|
||||
override val target: KotlinTarget get() = compilationDetails.target
|
||||
|
||||
final override val compileDependencyConfigurationName: String
|
||||
get() = compilationDetails.compileDependencyFilesHolder.dependencyConfigurationName
|
||||
|
||||
final override var compileDependencyFiles: FileCollection
|
||||
get() = compilationDetails.compileDependencyFilesHolder.dependencyFiles
|
||||
set(value) { compilationDetails.compileDependencyFilesHolder.dependencyFiles = value }
|
||||
|
||||
final override val kotlinSourceSets: MutableSet<KotlinSourceSet> get() =
|
||||
when (val details = compilationDetails) {
|
||||
is DefaultCompilationDetails -> details.directlyIncludedKotlinSourceSets // mutable in that subtype
|
||||
// TODO deprecate mutability of this set. We shouldn't allow mutating it directly anyway;
|
||||
else -> details.directlyIncludedKotlinSourceSets.toMutableSet()
|
||||
}
|
||||
|
||||
final override val defaultSourceSetName: String get() = compilationDetails.defaultSourceSetName
|
||||
|
||||
final override val compilationName: String get() = compilationDetails.compilationData.compilationPurpose
|
||||
|
||||
override fun kotlinOptions(configure: T.() -> Unit) =
|
||||
configure(kotlinOptions)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override val compileKotlinTask: KotlinCompile<T>
|
||||
get() = compileKotlinTaskProvider.get()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override val compileKotlinTaskProvider: TaskProvider<out KotlinCompile<T>>
|
||||
get() = target.project.locateTask(compileKotlinTaskName) ?: throw GradleException("Couldn't locate task $compileKotlinTaskName")
|
||||
|
||||
private val attributeContainer by lazy { HierarchyAttributeContainer(target.attributes) }
|
||||
|
||||
override fun getAttributes(): AttributeContainer = attributeContainer
|
||||
|
||||
override val defaultSourceSet: KotlinSourceSet
|
||||
get() = target.project.kotlinExtension.sourceSets.getByName(defaultSourceSetName)
|
||||
|
||||
override fun defaultSourceSet(configure: KotlinSourceSet.() -> Unit) = defaultSourceSet.configure()
|
||||
|
||||
override fun source(sourceSet: KotlinSourceSet) {
|
||||
compilationDetails.source(sourceSet)
|
||||
}
|
||||
|
||||
override fun toString(): String = "compilation '$name' ($target)"
|
||||
|
||||
override fun associateWith(other: KotlinCompilation<*>) {
|
||||
compilationDetails.associateWith((other as AbstractKotlinCompilation<*>).compilationDetails)
|
||||
}
|
||||
|
||||
override val associateWith: List<KotlinCompilation<*>>
|
||||
get() = Collections.unmodifiableList(compilationDetails.associateCompilations.map { it.compilation })
|
||||
|
||||
override val project: Project
|
||||
get() = target.project
|
||||
|
||||
override val owner: KotlinTarget
|
||||
get() = target
|
||||
|
||||
override val allKotlinSourceSets: Set<KotlinSourceSet>
|
||||
get() = compilationDetails.directlyIncludedKotlinSourceSets.withDependsOnClosure
|
||||
|
||||
override val relatedConfigurationNames: List<String>
|
||||
get() = compilationDetails.kotlinDependenciesHolder.relatedConfigurationNames + compileDependencyConfigurationName
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles
|
||||
|
||||
abstract class AbstractKotlinCompilationToRunnableFiles<T : KotlinCommonOptions>(
|
||||
override val compilationDetails: CompilationDetailsWithRuntime<T>,
|
||||
) : AbstractKotlinCompilation<T>(compilationDetails),
|
||||
KotlinCompilationToRunnableFiles<T> {
|
||||
|
||||
final override val runtimeDependencyConfigurationName: String get() = compilationDetails.runtimeDependencyFilesHolder.dependencyConfigurationName
|
||||
final override var runtimeDependencyFiles: FileCollection
|
||||
get() = compilationDetails.runtimeDependencyFilesHolder.dependencyFiles
|
||||
set(value) {
|
||||
compilationDetails.runtimeDependencyFilesHolder.dependencyFiles = value
|
||||
}
|
||||
|
||||
override val relatedConfigurationNames: List<String>
|
||||
get() = super<AbstractKotlinCompilation>.relatedConfigurationNames + runtimeDependencyConfigurationName
|
||||
}
|
||||
-122
@@ -5,25 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.attributes.AttributeContainer
|
||||
import org.gradle.api.execution.TaskExecutionListener
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.api.tasks.TaskState
|
||||
import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.project.model.LanguageSettings
|
||||
import org.jetbrains.kotlin.tooling.core.closure
|
||||
import java.util.*
|
||||
import java.util.concurrent.Callable
|
||||
@@ -42,104 +34,6 @@ internal fun KotlinCompilation<*>.isTest(): Boolean =
|
||||
*/
|
||||
internal val KotlinCompilation<*>.kotlinSourceSetsIncludingDefault: Set<KotlinSourceSet> get() = kotlinSourceSets + defaultSourceSet
|
||||
|
||||
abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
|
||||
internal open val compilationDetails: CompilationDetails<T>,
|
||||
) : KotlinCompilation<T>,
|
||||
HasKotlinDependencies,
|
||||
KotlinCompilationData<T> {
|
||||
|
||||
//region HasKotlinDependencies delegation: delegate members manually for better control and prevention of accidental overrides
|
||||
private val kotlinDependenciesHolder get() = compilationDetails.kotlinDependenciesHolder
|
||||
override val apiConfigurationName: String get() = kotlinDependenciesHolder.apiConfigurationName
|
||||
override val implementationConfigurationName: String get() = kotlinDependenciesHolder.implementationConfigurationName
|
||||
override val compileOnlyConfigurationName: String get() = kotlinDependenciesHolder.compileOnlyConfigurationName
|
||||
override val runtimeOnlyConfigurationName: String get() = kotlinDependenciesHolder.runtimeOnlyConfigurationName
|
||||
final override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) = kotlinDependenciesHolder.dependencies(configure)
|
||||
final override fun dependencies(configure: Action<KotlinDependencyHandler>) = dependencies { configure.execute(this) }
|
||||
//endregion
|
||||
|
||||
//region KotlinCompilationData delegation: delegate members manually for better control and prevention of accidental overrides
|
||||
private val compilationData get() = compilationDetails.compilationData
|
||||
override val compileAllTaskName: String get() = compilationData.compileAllTaskName
|
||||
final override val compilationPurpose: String get() = compilationData.compilationPurpose
|
||||
final override val compilationClassifier: String? get() = compilationData.compilationClassifier
|
||||
final override val languageSettings: LanguageSettings get() = compilationData.languageSettings
|
||||
final override val ownModuleName: String get() = compilationData.ownModuleName
|
||||
final override val moduleName: String get() = compilationData.moduleName
|
||||
final override val friendPaths: Iterable<FileCollection> get() = compilationData.friendPaths
|
||||
final override val platformType: KotlinPlatformType get() = compilationData.platformType
|
||||
final override val output: KotlinCompilationOutput get() = compilationData.output
|
||||
final override val compileKotlinTaskName: String get() = compilationData.compileKotlinTaskName
|
||||
final override val kotlinOptions: T get() = compilationData.kotlinOptions
|
||||
final override val kotlinSourceDirectoriesByFragmentName get() = compilationData.kotlinSourceDirectoriesByFragmentName
|
||||
//endregion
|
||||
|
||||
override val target: KotlinTarget get() = compilationDetails.target
|
||||
|
||||
final override val compileDependencyConfigurationName: String
|
||||
get() = compilationDetails.compileDependencyFilesHolder.dependencyConfigurationName
|
||||
|
||||
final override var compileDependencyFiles: FileCollection
|
||||
get() = compilationDetails.compileDependencyFilesHolder.dependencyFiles
|
||||
set(value) { compilationDetails.compileDependencyFilesHolder.dependencyFiles = value }
|
||||
|
||||
final override val kotlinSourceSets: MutableSet<KotlinSourceSet> get() =
|
||||
when (val details = compilationDetails) {
|
||||
is DefaultCompilationDetails -> details.directlyIncludedKotlinSourceSets // mutable in that subtype
|
||||
// TODO deprecate mutability of this set. We shouldn't allow mutating it directly anyway;
|
||||
else -> details.directlyIncludedKotlinSourceSets.toMutableSet()
|
||||
}
|
||||
|
||||
final override val defaultSourceSetName: String get() = compilationDetails.defaultSourceSetName
|
||||
|
||||
final override val compilationName: String get() = compilationDetails.compilationData.compilationPurpose
|
||||
|
||||
override fun kotlinOptions(configure: T.() -> Unit) =
|
||||
configure(kotlinOptions)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override val compileKotlinTask: KotlinCompile<T>
|
||||
get() = compileKotlinTaskProvider.get()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override val compileKotlinTaskProvider: TaskProvider<out KotlinCompile<T>>
|
||||
get() = target.project.locateTask(compileKotlinTaskName) ?: throw GradleException("Couldn't locate task $compileKotlinTaskName")
|
||||
|
||||
private val attributeContainer by lazy { HierarchyAttributeContainer(target.attributes) }
|
||||
|
||||
override fun getAttributes(): AttributeContainer = attributeContainer
|
||||
|
||||
override val defaultSourceSet: KotlinSourceSet
|
||||
get() = target.project.kotlinExtension.sourceSets.getByName(defaultSourceSetName)
|
||||
|
||||
override fun defaultSourceSet(configure: KotlinSourceSet.() -> Unit) = defaultSourceSet.configure()
|
||||
|
||||
override fun source(sourceSet: KotlinSourceSet) {
|
||||
compilationDetails.source(sourceSet)
|
||||
}
|
||||
|
||||
override fun toString(): String = "compilation '$name' ($target)"
|
||||
|
||||
override fun associateWith(other: KotlinCompilation<*>) {
|
||||
compilationDetails.associateWith((other as AbstractKotlinCompilation<*>).compilationDetails)
|
||||
}
|
||||
|
||||
override val associateWith: List<KotlinCompilation<*>>
|
||||
get() = Collections.unmodifiableList(compilationDetails.associateCompilations.map { it.compilation })
|
||||
|
||||
override val project: Project
|
||||
get() = target.project
|
||||
|
||||
override val owner: KotlinTarget
|
||||
get() = target
|
||||
|
||||
override val allKotlinSourceSets: Set<KotlinSourceSet>
|
||||
get() = compilationDetails.directlyIncludedKotlinSourceSets.withDependsOnClosure
|
||||
|
||||
override val relatedConfigurationNames: List<String>
|
||||
get() = compilationDetails.kotlinDependenciesHolder.relatedConfigurationNames + compileDependencyConfigurationName
|
||||
}
|
||||
|
||||
internal fun addCommonSourcesToKotlinCompileTask(
|
||||
project: Project,
|
||||
taskName: String,
|
||||
@@ -184,22 +78,6 @@ internal fun addSourcesToKotlinCompileTask(
|
||||
internal val KotlinCompilation<*>.associateWithClosure: Iterable<KotlinCompilation<*>>
|
||||
get() = this.closure { it.associateWith }
|
||||
|
||||
abstract class AbstractKotlinCompilationToRunnableFiles<T : KotlinCommonOptions>(
|
||||
override val compilationDetails: CompilationDetailsWithRuntime<T>,
|
||||
) : AbstractKotlinCompilation<T>(compilationDetails),
|
||||
KotlinCompilationToRunnableFiles<T> {
|
||||
|
||||
final override val runtimeDependencyConfigurationName: String get() = compilationDetails.runtimeDependencyFilesHolder.dependencyConfigurationName
|
||||
final override var runtimeDependencyFiles: FileCollection
|
||||
get() = compilationDetails.runtimeDependencyFilesHolder.dependencyFiles
|
||||
set(value) {
|
||||
compilationDetails.runtimeDependencyFilesHolder.dependencyFiles = value
|
||||
}
|
||||
|
||||
override val relatedConfigurationNames: List<String>
|
||||
get() = super<AbstractKotlinCompilation>.relatedConfigurationNames + runtimeDependencyConfigurationName
|
||||
}
|
||||
|
||||
internal fun KotlinCompilation<*>.disambiguateName(simpleName: String): String {
|
||||
return lowerCamelCaseName(
|
||||
target.disambiguationClassifier,
|
||||
|
||||
Reference in New Issue
Block a user