diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index e1407339888..7cdf52ea11d 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -454,16 +454,19 @@ internal fun configureDefaultVersionsResolutionStrategy(project: Project, kotlin } internal open class KotlinPlugin( - tasksProvider: KotlinTasksProvider, kotlinPluginVersion: String, - registry: ToolingModelBuilderRegistry -) : AbstractKotlinPlugin(tasksProvider, kotlinPluginVersion, registry) { + registry: ToolingModelBuilderRegistry +) : AbstractKotlinPlugin(KotlinTasksProvider(targetName), kotlinPluginVersion, registry) { + + companion object { + private const val targetName = "" // use empty suffix for the task names + } override fun buildSourceSetProcessor(project: Project, compilation: KotlinCompilation, kotlinPluginVersion: String) = Kotlin2JvmSourceSetProcessor(project, tasksProvider, compilation, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, "").apply { + val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, targetName).apply { disambiguationClassifier = null // don't add anything to the task names } (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target @@ -474,10 +477,13 @@ internal open class KotlinPlugin( } internal open class KotlinCommonPlugin( - tasksProvider: KotlinTasksProvider, kotlinPluginVersion: String, - registry: ToolingModelBuilderRegistry -) : AbstractKotlinPlugin(tasksProvider, kotlinPluginVersion, registry) { + registry: ToolingModelBuilderRegistry +) : AbstractKotlinPlugin(KotlinTasksProvider(targetName), kotlinPluginVersion, registry) { + + companion object { + private const val targetName = "common" + } override fun buildSourceSetProcessor( project: Project, @@ -487,7 +493,7 @@ internal open class KotlinCommonPlugin( KotlinCommonSourceSetProcessor(project, compilation, tasksProvider, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.common, "common") + val target = KotlinWithJavaTarget(project, KotlinPlatformType.common, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) @@ -495,10 +501,13 @@ internal open class KotlinCommonPlugin( } internal open class Kotlin2JsPlugin( - tasksProvider: KotlinTasksProvider, kotlinPluginVersion: String, - registry: ToolingModelBuilderRegistry -) : AbstractKotlinPlugin(tasksProvider, kotlinPluginVersion, registry) { + registry: ToolingModelBuilderRegistry +) : AbstractKotlinPlugin(KotlinTasksProvider(targetName), kotlinPluginVersion, registry) { + + companion object { + private const val targetName = "2Js" + } override fun buildSourceSetProcessor( project: Project, @@ -510,7 +519,7 @@ internal open class Kotlin2JsPlugin( ) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.js, "2Js") + val target = KotlinWithJavaTarget(project, KotlinPlatformType.js, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) @@ -518,12 +527,12 @@ internal open class Kotlin2JsPlugin( } internal open class KotlinAndroidPlugin( - val tasksProvider: KotlinTasksProvider, private val kotlinPluginVersion: String ) : Plugin { override fun apply(project: Project) { val androidTarget = KotlinAndroidTarget("", project) + val tasksProvider = AndroidTasksProvider(androidTarget.targetName) applyToTarget( project, androidTarget, tasksProvider, 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 08c069a5dfd..e0ce9f0663b 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 @@ -29,8 +29,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.source.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory -import org.jetbrains.kotlin.gradle.tasks.* -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.gradle.tasks.KOTLIN_COMPILER_EMBEDDABLE +import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP import java.io.FileNotFoundException import java.util.* import javax.inject.Inject @@ -82,7 +82,7 @@ open class KotlinPluginWrapper @Inject constructor( protected val registry: ToolingModelBuilderRegistry ): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin = - KotlinPlugin(KotlinTasksProvider(), kotlinPluginVersion, registry) + KotlinPlugin(kotlinPluginVersion, registry) override val projectExtensionClass: KClass get() = KotlinJvmProjectExtension::class @@ -93,7 +93,7 @@ open class KotlinCommonPluginWrapper @Inject constructor( protected val registry: ToolingModelBuilderRegistry ): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin = - KotlinCommonPlugin(KotlinCommonTasksProvider(), kotlinPluginVersion, registry) + KotlinCommonPlugin(kotlinPluginVersion, registry) override val projectExtensionClass: KClass get() = KotlinSingleJavaTargetExtension::class @@ -104,10 +104,7 @@ open class KotlinAndroidPluginWrapper @Inject constructor( protected val registry: ToolingModelBuilderRegistry ): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin = - KotlinAndroidPlugin( - AndroidTasksProvider(), - kotlinPluginVersion - ) + KotlinAndroidPlugin(kotlinPluginVersion) } open class Kotlin2JsPluginWrapper @Inject constructor( @@ -115,7 +112,7 @@ open class Kotlin2JsPluginWrapper @Inject constructor( protected val registry: ToolingModelBuilderRegistry ): KotlinBasePluginWrapper(fileResolver) { override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin = - Kotlin2JsPlugin(Kotlin2JsTasksProvider(), kotlinPluginVersion, registry) + Kotlin2JsPlugin(kotlinPluginVersion, registry) override val projectExtensionClass: KClass get() = KotlinSingleJavaTargetExtension::class diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskToFriendTaskMapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskToFriendTaskMapper.kt index e699b4d6b83..a88aaccccc6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskToFriendTaskMapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskToFriendTaskMapper.kt @@ -33,18 +33,17 @@ internal abstract class TaskToFriendTaskMapper { sealed internal class RegexTaskToFriendTaskMapper( private val prefix: String, suffix: String, + private val targetName: String, private val postfixReplacement: String ) : TaskToFriendTaskMapper() { - class Default : RegexTaskToFriendTaskMapper("compile", "TestKotlin(AfterJava)?", "Kotlin") - class JavaScript : RegexTaskToFriendTaskMapper("compile", "TestKotlin2Js", "Kotlin2Js") - class Common : RegexTaskToFriendTaskMapper("compile", "TestKotlinCommon", "KotlinCommon") - class Android : RegexTaskToFriendTaskMapper("compile", "(Unit|Android)TestKotlin(AfterJava)?", "Kotlin") + class Default(targetName: String) : RegexTaskToFriendTaskMapper("compile", "TestKotlin", targetName, "Kotlin") + class Android(targetName: String) : RegexTaskToFriendTaskMapper("compile", "(Unit|Android)TestKotlin", targetName, "Kotlin") - private val regex = "$prefix(.*)$suffix".toRegex() + private val regex = "$prefix(.*)$suffix${targetName.capitalize()}".toRegex() override fun getFriendByName(name: String): String? { val match = regex.matchEntire(name) ?: return null val variant = match.groups[1]?.value ?: "" - return prefix + variant + postfixReplacement + return prefix + variant + postfixReplacement + targetName.capitalize() } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index 4b766f95927..e80b99cce90 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -12,8 +12,6 @@ import org.gradle.internal.cleanup.BuildOutputCleanupRegistry import org.gradle.internal.reflect.Instantiator import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.tasks.AndroidTasksProvider -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsTasksProvider -import org.jetbrains.kotlin.gradle.tasks.KotlinCommonTasksProvider import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider abstract class KotlinOnlyTargetPreset( @@ -74,7 +72,7 @@ class KotlinUniversalTargetPreset( KotlinCommonSourceSetProcessor( project, compilation, - KotlinCommonTasksProvider(), + KotlinTasksProvider(compilation.target.targetName), kotlinPluginVersion ) @@ -105,7 +103,7 @@ class KotlinJvmTargetPreset( get() = KotlinPlatformType.jvm override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> = - Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(), compilation, kotlinPluginVersion) + Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(compilation.target.targetName), compilation, kotlinPluginVersion) companion object { const val PRESET_NAME = "jvm" @@ -134,7 +132,7 @@ class KotlinJsTargetPreset( get() = KotlinPlatformType.js override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> = - Kotlin2JsSourceSetProcessor(project, Kotlin2JsTasksProvider(), compilation, kotlinPluginVersion) + Kotlin2JsSourceSetProcessor(project, KotlinTasksProvider(compilation.target.targetName), compilation, kotlinPluginVersion) companion object { const val PRESET_NAME = "js" @@ -154,11 +152,10 @@ class KotlinAndroidTargetPreset( } KotlinAndroidPlugin.applyToTarget( - project, result, AndroidTasksProvider(), + project, result, AndroidTasksProvider(name), kotlinPluginVersion ) - return result } @@ -182,7 +179,7 @@ class KotlinJvmWithJavaTargetPreset( } AbstractKotlinPlugin.configureTarget(target) { compilation -> - Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(), compilation, kotlinPluginVersion) + Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(name), compilation, kotlinPluginVersion) } target.compilations.all { compilation -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt index 5ffb91b95c5..f746b249daf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.RegexTaskToFriendTaskMapper import org.jetbrains.kotlin.gradle.plugin.TaskToFriendTaskMapper import org.jetbrains.kotlin.gradle.plugin.mapKotlinTaskProperties -internal open class KotlinTasksProvider { +internal open class KotlinTasksProvider(val targetName: String) { open fun createKotlinJVMTask(project: Project, name: String, sourceSetName: String): KotlinCompile = project.tasks.create(name, KotlinCompile::class.java).apply { configure(this, project, sourceSetName) @@ -48,22 +48,12 @@ internal open class KotlinTasksProvider { } protected open val taskToFriendTaskMapper: TaskToFriendTaskMapper = - RegexTaskToFriendTaskMapper.Default() + RegexTaskToFriendTaskMapper.Default(targetName) } -internal class KotlinCommonTasksProvider : KotlinTasksProvider() { +internal class AndroidTasksProvider(targetName: String) : KotlinTasksProvider(targetName) { override val taskToFriendTaskMapper: TaskToFriendTaskMapper = - RegexTaskToFriendTaskMapper.Common() -} - -internal class Kotlin2JsTasksProvider : KotlinTasksProvider() { - override val taskToFriendTaskMapper: TaskToFriendTaskMapper = - RegexTaskToFriendTaskMapper.JavaScript() -} - -internal class AndroidTasksProvider : KotlinTasksProvider() { - override val taskToFriendTaskMapper: TaskToFriendTaskMapper = - RegexTaskToFriendTaskMapper.Android() + RegexTaskToFriendTaskMapper.Android(targetName) override fun configure(kotlinTask: AbstractKotlinCompile<*>, project: Project, sourceSetName: String) { super.configure(kotlinTask, project, sourceSetName) diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/RegexTaskToFriendTaskMapperTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/RegexTaskToFriendTaskMapperTest.kt index c33c7c6b0fb..c7b3cb1471d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/RegexTaskToFriendTaskMapperTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/RegexTaskToFriendTaskMapperTest.kt @@ -22,21 +22,22 @@ import org.junit.Test class RegexTaskToFriendTaskMapperTest { @Test fun getFriendTaskNameDefault() { - val mapper = RegexTaskToFriendTaskMapper.Default() + val mapper = RegexTaskToFriendTaskMapper.Default("") Assert.assertEquals("compileKotlin", mapper["compileTestKotlin"]) Assert.assertEquals(null, mapper["compileKotlin"]) } @Test - fun getFriendTasksNameJavaScript() { - val mapper = RegexTaskToFriendTaskMapper.JavaScript() - Assert.assertEquals("compileKotlin2Js", mapper["compileTestKotlin2Js"]) - Assert.assertEquals(null, mapper["compileKotlin2Js"]) + fun getFriendTaskNameCustomTargetName() { + val mapper = RegexTaskToFriendTaskMapper.Default("Foo") + Assert.assertEquals("compileKotlinFoo", mapper["compileTestKotlinFoo"]) + Assert.assertEquals(null, mapper["compileKotlinFoo"]) + Assert.assertEquals(null, mapper["compileTestKotlinBar"]) } @Test fun getFriendTaskNameAndroid() { - val mapper = RegexTaskToFriendTaskMapper.Android() + val mapper = RegexTaskToFriendTaskMapper.Android("") // Unit test examples Assert.assertEquals("compileDebugKotlin", mapper["compileDebugUnitTestKotlin"]) Assert.assertEquals("compileReleaseKotlin", mapper["compileReleaseUnitTestKotlin"]) @@ -48,4 +49,21 @@ class RegexTaskToFriendTaskMapperTest { Assert.assertEquals(null, mapper["compileDebugKotlin"]) } + + @Test + fun getFriendTaskNameAndroidCustomTargetName() { + val mapper = RegexTaskToFriendTaskMapper.Android("Foo") + // Unit test examples + Assert.assertEquals("compileDebugKotlinFoo", mapper["compileDebugUnitTestKotlinFoo"]) + Assert.assertEquals("compileReleaseKotlinFoo", mapper["compileReleaseUnitTestKotlinFoo"]) + Assert.assertEquals("compileProdDebugKotlinFoo", mapper["compileProdDebugUnitTestKotlinFoo"]) + // Android test examples + Assert.assertEquals("compileDebugKotlinFoo", mapper["compileDebugAndroidTestKotlinFoo"]) + Assert.assertEquals("compileReleaseKotlinFoo", mapper["compileReleaseAndroidTestKotlinFoo"]) + Assert.assertEquals("compileProdDebugKotlinFoo", mapper["compileProdDebugAndroidTestKotlinFoo"]) + + Assert.assertEquals(null, mapper["compileDebugKotlinFoo"]) + Assert.assertEquals(null, mapper["compileDebugUnitTestKotlinBar"]) + Assert.assertEquals(null, mapper["compileDebugAndroidTestKotlinBar"]) + } } \ No newline at end of file