From 2286498d8d91d8281c03c78da06fa20374f616a4 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Tue, 24 Nov 2020 09:45:34 +0100 Subject: [PATCH] Share defaultSourceFolder logic between syncKotlinAndAndroidSourceSets.kt and KotlinSourceSetFactory.kt --- .../gradle/plugin/KotlinPluginWrapper.kt | 24 ++++++----------- .../mpp/syncKotlinAndAndroidSourceSets.kt | 21 +++++++-------- .../plugin/sources/KotlinSourceSetFactory.kt | 26 ++++++++++++------- 3 files changed, 34 insertions(+), 37 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index f6d7f077177..0a5f0cf2420 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -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 { +abstract class KotlinBasePluginWrapper : Plugin { private val log = Logging.getLogger(this.javaClass) val kotlinPluginVersion = loadKotlinVersionFromResource(log) @@ -57,7 +55,7 @@ abstract class KotlinBasePluginWrapper( open val projectExtensionClass: KClass get() = KotlinProjectExtension::class internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory = - 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 = 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 = 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 = 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 = 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 = 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 = KotlinMultiplatformPlugin( kotlinPluginVersion, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt index 1956643eefa..59f4696bee6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt @@ -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") -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt index e4205c0f87f..51279abef8b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnab import java.io.File internal abstract class KotlinSourceSetFactory internal constructor( - protected val fileResolver: FileResolver, protected val project: Project ) : NamedDomainObjectFactory { @@ -29,11 +28,8 @@ internal abstract class KotlinSourceSetFactory 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 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(fileResolver, project) { + project: Project +) : KotlinSourceSetFactory(project) { override val itemClass: Class 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) } -} \ No newline at end of file +}