Share defaultSourceFolder logic between syncKotlinAndAndroidSourceSets.kt and KotlinSourceSetFactory.kt
This commit is contained in:
committed by
Sebastian Sellmair
parent
7c7eada452
commit
2286498d8d
+8
-16
@@ -47,9 +47,7 @@ import org.jetbrains.kotlin.statistics.metrics.StringMetrics
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class KotlinBasePluginWrapper(
|
abstract class KotlinBasePluginWrapper : Plugin<Project> {
|
||||||
protected val fileResolver: FileResolver
|
|
||||||
) : Plugin<Project> {
|
|
||||||
|
|
||||||
private val log = Logging.getLogger(this.javaClass)
|
private val log = Logging.getLogger(this.javaClass)
|
||||||
val kotlinPluginVersion = loadKotlinVersionFromResource(log)
|
val kotlinPluginVersion = loadKotlinVersionFromResource(log)
|
||||||
@@ -57,7 +55,7 @@ abstract class KotlinBasePluginWrapper(
|
|||||||
open val projectExtensionClass: KClass<out KotlinProjectExtension> get() = KotlinProjectExtension::class
|
open val projectExtensionClass: KClass<out KotlinProjectExtension> get() = KotlinProjectExtension::class
|
||||||
|
|
||||||
internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory<KotlinSourceSet> =
|
internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory<KotlinSourceSet> =
|
||||||
DefaultKotlinSourceSetFactory(project, fileResolver)
|
DefaultKotlinSourceSetFactory(project)
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
val listenerRegistryHolder = BuildEventsListenerRegistryHolder.getInstance(project)
|
val listenerRegistryHolder = BuildEventsListenerRegistryHolder.getInstance(project)
|
||||||
@@ -127,9 +125,8 @@ abstract class KotlinBasePluginWrapper(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinPluginWrapper @Inject constructor(
|
open class KotlinPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver,
|
|
||||||
protected val registry: ToolingModelBuilderRegistry
|
protected val registry: ToolingModelBuilderRegistry
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
) : KotlinBasePluginWrapper() {
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
KotlinPlugin(kotlinPluginVersion, registry)
|
KotlinPlugin(kotlinPluginVersion, registry)
|
||||||
|
|
||||||
@@ -138,9 +135,8 @@ open class KotlinPluginWrapper @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinCommonPluginWrapper @Inject constructor(
|
open class KotlinCommonPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver,
|
|
||||||
protected val registry: ToolingModelBuilderRegistry
|
protected val registry: ToolingModelBuilderRegistry
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
) : KotlinBasePluginWrapper() {
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
KotlinCommonPlugin(kotlinPluginVersion, registry)
|
KotlinCommonPlugin(kotlinPluginVersion, registry)
|
||||||
|
|
||||||
@@ -149,9 +145,8 @@ open class KotlinCommonPluginWrapper @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinAndroidPluginWrapper @Inject constructor(
|
open class KotlinAndroidPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver,
|
|
||||||
protected val registry: ToolingModelBuilderRegistry
|
protected val registry: ToolingModelBuilderRegistry
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
) : KotlinBasePluginWrapper() {
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
KotlinAndroidPlugin(kotlinPluginVersion, registry)
|
KotlinAndroidPlugin(kotlinPluginVersion, registry)
|
||||||
|
|
||||||
@@ -160,9 +155,8 @@ open class KotlinAndroidPluginWrapper @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class Kotlin2JsPluginWrapper @Inject constructor(
|
open class Kotlin2JsPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver,
|
|
||||||
protected val registry: ToolingModelBuilderRegistry
|
protected val registry: ToolingModelBuilderRegistry
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
) : KotlinBasePluginWrapper() {
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
Kotlin2JsPlugin(kotlinPluginVersion, registry)
|
Kotlin2JsPlugin(kotlinPluginVersion, registry)
|
||||||
|
|
||||||
@@ -171,8 +165,7 @@ open class Kotlin2JsPluginWrapper @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinJsPluginWrapper @Inject constructor(
|
open class KotlinJsPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver
|
) : KotlinBasePluginWrapper() {
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
KotlinJsPlugin(kotlinPluginVersion)
|
KotlinJsPlugin(kotlinPluginVersion)
|
||||||
|
|
||||||
@@ -204,9 +197,8 @@ open class KotlinJsPluginWrapper @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class KotlinMultiplatformPluginWrapper @Inject constructor(
|
open class KotlinMultiplatformPluginWrapper @Inject constructor(
|
||||||
fileResolver: FileResolver,
|
|
||||||
private val featurePreviews: FeaturePreviews
|
private val featurePreviews: FeaturePreviews
|
||||||
) : KotlinBasePluginWrapper(fileResolver) {
|
) : KotlinBasePluginWrapper() {
|
||||||
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
|
||||||
KotlinMultiplatformPlugin(
|
KotlinMultiplatformPlugin(
|
||||||
kotlinPluginVersion,
|
kotlinPluginVersion,
|
||||||
|
|||||||
+10
-11
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.Companion.kotlinSourceSetNameForAndroidSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.Companion.kotlinSourceSetNameForAndroidSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.addConvention
|
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
|
import java.io.File
|
||||||
|
|
||||||
internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
|
internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
|
||||||
@@ -107,39 +109,36 @@ private fun syncKotlinAndAndroidResources(
|
|||||||
|
|
||||||
androidSourceSet.resources.srcDirs(*kotlinSourceSet.resources.toList().toTypedArray())
|
androidSourceSet.resources.srcDirs(*kotlinSourceSet.resources.toList().toTypedArray())
|
||||||
if (androidSourceSet.resources.srcDirs.isNotEmpty()) {
|
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)
|
kotlinSourceSet.resources.srcDirs(androidSourceSet.resources.srcDirs)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (androidSourceSet.assets.srcDirs.isNotEmpty()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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")
|
|
||||||
}
|
|
||||||
|
|||||||
+15
-9
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnab
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal constructor(
|
internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal constructor(
|
||||||
protected val fileResolver: FileResolver,
|
|
||||||
protected val project: Project
|
protected val project: Project
|
||||||
) : NamedDomainObjectFactory<KotlinSourceSet> {
|
) : NamedDomainObjectFactory<KotlinSourceSet> {
|
||||||
|
|
||||||
@@ -29,11 +28,8 @@ internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal con
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun defaultSourceLocation(sourceSetName: String): File =
|
|
||||||
project.file("src/$sourceSetName")
|
|
||||||
|
|
||||||
protected open fun setUpSourceSetDefaults(sourceSet: T) {
|
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)
|
defineSourceSetConfigurations(project, sourceSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,19 +45,29 @@ internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal con
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun doCreateSourceSet(name: String): T
|
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(
|
internal class DefaultKotlinSourceSetFactory(
|
||||||
project: Project,
|
project: Project
|
||||||
fileResolver: FileResolver
|
) : KotlinSourceSetFactory<DefaultKotlinSourceSet>(project) {
|
||||||
) : KotlinSourceSetFactory<DefaultKotlinSourceSet>(fileResolver, project) {
|
|
||||||
|
|
||||||
override val itemClass: Class<DefaultKotlinSourceSet>
|
override val itemClass: Class<DefaultKotlinSourceSet>
|
||||||
get() = DefaultKotlinSourceSet::class.java
|
get() = DefaultKotlinSourceSet::class.java
|
||||||
|
|
||||||
override fun setUpSourceSetDefaults(sourceSet: DefaultKotlinSourceSet) {
|
override fun setUpSourceSetDefaults(sourceSet: DefaultKotlinSourceSet) {
|
||||||
super.setUpSourceSetDefaults(sourceSet)
|
super.setUpSourceSetDefaults(sourceSet)
|
||||||
sourceSet.resources.srcDir(File(defaultSourceLocation(sourceSet.name), "resources"))
|
sourceSet.resources.srcDir(defaultSourceFolder(project, sourceSet.name, "resources"))
|
||||||
|
|
||||||
val dependencyConfigurationWithMetadata = with(sourceSet) {
|
val dependencyConfigurationWithMetadata = with(sourceSet) {
|
||||||
listOf(
|
listOf(
|
||||||
|
|||||||
Reference in New Issue
Block a user