Share defaultSourceFolder logic between syncKotlinAndAndroidSourceSets.kt and KotlinSourceSetFactory.kt

This commit is contained in:
sebastian.sellmair
2020-11-24 09:45:34 +01:00
committed by Sebastian Sellmair
parent 7c7eada452
commit 2286498d8d
3 changed files with 34 additions and 37 deletions
@@ -47,9 +47,7 @@ import org.jetbrains.kotlin.statistics.metrics.StringMetrics
import javax.inject.Inject
import kotlin.reflect.KClass
abstract class KotlinBasePluginWrapper(
protected val fileResolver: FileResolver
) : Plugin<Project> {
abstract class KotlinBasePluginWrapper : Plugin<Project> {
private val log = Logging.getLogger(this.javaClass)
val kotlinPluginVersion = loadKotlinVersionFromResource(log)
@@ -57,7 +55,7 @@ abstract class KotlinBasePluginWrapper(
open val projectExtensionClass: KClass<out KotlinProjectExtension> get() = KotlinProjectExtension::class
internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory<KotlinSourceSet> =
DefaultKotlinSourceSetFactory(project, fileResolver)
DefaultKotlinSourceSetFactory(project)
override fun apply(project: Project) {
val listenerRegistryHolder = BuildEventsListenerRegistryHolder.getInstance(project)
@@ -127,9 +125,8 @@ abstract class KotlinBasePluginWrapper(
}
open class KotlinPluginWrapper @Inject constructor(
fileResolver: FileResolver,
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinPlugin(kotlinPluginVersion, registry)
@@ -138,9 +135,8 @@ open class KotlinPluginWrapper @Inject constructor(
}
open class KotlinCommonPluginWrapper @Inject constructor(
fileResolver: FileResolver,
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinCommonPlugin(kotlinPluginVersion, registry)
@@ -149,9 +145,8 @@ open class KotlinCommonPluginWrapper @Inject constructor(
}
open class KotlinAndroidPluginWrapper @Inject constructor(
fileResolver: FileResolver,
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinAndroidPlugin(kotlinPluginVersion, registry)
@@ -160,9 +155,8 @@ open class KotlinAndroidPluginWrapper @Inject constructor(
}
open class Kotlin2JsPluginWrapper @Inject constructor(
fileResolver: FileResolver,
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
Kotlin2JsPlugin(kotlinPluginVersion, registry)
@@ -171,8 +165,7 @@ open class Kotlin2JsPluginWrapper @Inject constructor(
}
open class KotlinJsPluginWrapper @Inject constructor(
fileResolver: FileResolver
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinJsPlugin(kotlinPluginVersion)
@@ -204,9 +197,8 @@ open class KotlinJsPluginWrapper @Inject constructor(
}
open class KotlinMultiplatformPluginWrapper @Inject constructor(
fileResolver: FileResolver,
private val featurePreviews: FeaturePreviews
) : KotlinBasePluginWrapper(fileResolver) {
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinMultiplatformPlugin(
kotlinPluginVersion,
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.Companion.kotlinSourceSetNameForAndroidSourceSet
import org.jetbrains.kotlin.gradle.plugin.addConvention
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory.Companion.defaultSourceFolder
import java.io.File
internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
@@ -107,39 +109,36 @@ private fun syncKotlinAndAndroidResources(
androidSourceSet.resources.srcDirs(*kotlinSourceSet.resources.toList().toTypedArray())
if (androidSourceSet.resources.srcDirs.isNotEmpty()) {
androidSourceSet.resources.srcDir(kotlinSourceSet.sourceFolderFor(project, "resources"))
androidSourceSet.resources.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "resources"))
kotlinSourceSet.resources.srcDirs(androidSourceSet.resources.srcDirs)
}
if (androidSourceSet.assets.srcDirs.isNotEmpty()) {
androidSourceSet.assets.srcDir(kotlinSourceSet.sourceFolderFor(project, "assets"))
androidSourceSet.assets.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "assets"))
}
if (androidSourceSet.res.srcDirs.isNotEmpty()) {
androidSourceSet.res.srcDir(kotlinSourceSet.sourceFolderFor(project, "res"))
androidSourceSet.res.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "res"))
}
if (androidSourceSet.aidl.srcDirs.isNotEmpty()) {
androidSourceSet.aidl.srcDir(kotlinSourceSet.sourceFolderFor(project, "aidl"))
androidSourceSet.aidl.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "aidl"))
}
if (androidSourceSet.renderscript.srcDirs.isNotEmpty()) {
androidSourceSet.renderscript.srcDir(kotlinSourceSet.sourceFolderFor(project, "rs"))
androidSourceSet.renderscript.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "rs"))
}
if (androidSourceSet.jni.srcDirs.isNotEmpty()) {
androidSourceSet.jni.srcDir(kotlinSourceSet.sourceFolderFor(project, "jni"))
androidSourceSet.jni.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "jni"))
}
if (androidSourceSet.jniLibs.srcDirs.isNotEmpty()) {
androidSourceSet.jniLibs.srcDir(kotlinSourceSet.sourceFolderFor(project, "jniLibs"))
androidSourceSet.jniLibs.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "jniLibs"))
}
if (androidSourceSet.shaders.srcDirs.isNotEmpty()) {
androidSourceSet.shaders.srcDir(kotlinSourceSet.sourceFolderFor(project, "shaders"))
androidSourceSet.shaders.srcDir(defaultSourceFolder(project, kotlinSourceSet.name, "shaders"))
}
}
private fun KotlinSourceSet.sourceFolderFor(project: Project, type: String): File {
return project.file("src/${this.name}/$type")
}
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnab
import java.io.File
internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal constructor(
protected val fileResolver: FileResolver,
protected val project: Project
) : NamedDomainObjectFactory<KotlinSourceSet> {
@@ -29,11 +28,8 @@ internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal con
return result
}
protected open fun defaultSourceLocation(sourceSetName: String): File =
project.file("src/$sourceSetName")
protected open fun setUpSourceSetDefaults(sourceSet: T) {
sourceSet.kotlin.srcDir(File(defaultSourceLocation(sourceSet.name), "kotlin"))
sourceSet.kotlin.srcDir(defaultSourceFolder(project, sourceSet.name, "kotlin"))
defineSourceSetConfigurations(project, sourceSet)
}
@@ -49,19 +45,29 @@ internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal con
}
protected abstract fun doCreateSourceSet(name: String): T
companion object {
/**
* @return default location of source folders for a kotlin source set
* e.g. src/jvmMain/kotlin (sourceSetName="jvmMain", type="kotlin")
*/
fun defaultSourceFolder(project: Project, sourceSetName: String, type: String): File {
return project.file("src/$sourceSetName/$type")
}
}
}
internal class DefaultKotlinSourceSetFactory(
project: Project,
fileResolver: FileResolver
) : KotlinSourceSetFactory<DefaultKotlinSourceSet>(fileResolver, project) {
project: Project
) : KotlinSourceSetFactory<DefaultKotlinSourceSet>(project) {
override val itemClass: Class<DefaultKotlinSourceSet>
get() = DefaultKotlinSourceSet::class.java
override fun setUpSourceSetDefaults(sourceSet: DefaultKotlinSourceSet) {
super.setUpSourceSetDefaults(sourceSet)
sourceSet.resources.srcDir(File(defaultSourceLocation(sourceSet.name), "resources"))
sourceSet.resources.srcDir(defaultSourceFolder(project, sourceSet.name, "resources"))
val dependencyConfigurationWithMetadata = with(sourceSet) {
listOf(
@@ -90,4 +96,4 @@ internal class DefaultKotlinSourceSetFactory(
override fun doCreateSourceSet(name: String): DefaultKotlinSourceSet {
return DefaultKotlinSourceSet(project, name)
}
}
}