From b37c2a05fd394b8747d3748473ef12778a6d6919 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 21 Jan 2020 13:21:16 +0300 Subject: [PATCH] [Gradle, JS] Configure ir target in legacy plugin #2 --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 32 ++------------- .../gradle/targets/js/KotlinJsTarget.kt | 5 ++- .../targets/js/KotlinJsTargetConfigurator.kt | 41 +++++++++++++++++++ .../gradle/targets/js/KotlinJsTargetPreset.kt | 34 +++------------ 4 files changed, 53 insertions(+), 59 deletions(-) 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 4272b793a16..62f9456fa43 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 @@ -5,7 +5,6 @@ import com.android.build.gradle.BasePlugin import com.android.build.gradle.api.AndroidSourceSet import com.android.build.gradle.api.BaseVariant import com.android.builder.model.SourceProvider -import groovy.lang.Closure import org.gradle.api.* import org.gradle.api.artifacts.ExternalDependency import org.gradle.api.artifacts.MutableVersionConstraint @@ -22,7 +21,10 @@ import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.plugins.MavenPluginConvention import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.tasks.* +import org.gradle.api.tasks.CompileClasspathNormalizer +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.Upload import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.gradle.jvm.tasks.Jar @@ -288,8 +290,6 @@ internal class Kotlin2JsSourceSetProcessor( it.dependsOn(kotlinTask) } - registerCleanSourceMapTask() - if (kotlinCompilation is KotlinWithJavaCompilation<*>) { kotlinCompilation.javaSourceSet.clearJavaSrcDirs() } @@ -320,17 +320,6 @@ internal class Kotlin2JsSourceSetProcessor( .forEach { task -> kotlinCompilation.allKotlinSourceSets.forEach { sourceSet -> task.source(sourceSet.kotlin) } } } } - - private fun registerCleanSourceMapTask() { - val taskName = kotlinCompilation.composeName("clean", "sourceMap") - project.registerTask(taskName) { - it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap } - it.delete(object : Closure(this) { - override fun call(): String? = (kotlinTask.get().property("outputFile") as File).canonicalPath + ".map" - }) - } - project.tasks.findByName("clean")?.dependsOn(taskName) - } } internal class KotlinJsIrSourceSetProcessor( @@ -392,8 +381,6 @@ internal class KotlinJsIrSourceSetProcessor( it.dependsOn(kotlinTask) } - registerCleanSourceMapTask() - val compilation = kotlinCompilation as KotlinJsIrCompilation listOf( @@ -435,17 +422,6 @@ internal class KotlinJsIrSourceSetProcessor( .forEach { task -> kotlinCompilation.allKotlinSourceSets.forEach { sourceSet -> task.source(sourceSet.kotlin) } } } } - - private fun registerCleanSourceMapTask() { - val taskName = kotlinCompilation.composeName("clean", "sourceMap") - project.registerTask(taskName) { - it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap } - it.delete(object : Closure(this) { - override fun call(): String? = (kotlinTask.get().property("outputFile") as File).canonicalPath + ".map" - }) - } - project.tasks.findByName("clean")?.dependsOn(taskName) - } } internal class KotlinCommonSourceSetProcessor( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index f66c47ed645..46cbbac363f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -29,8 +29,7 @@ open class KotlinJsTarget @Inject constructor( project: Project, - platformType: KotlinPlatformType, - val irTarget: KotlinJsIrTarget? + platformType: KotlinPlatformType ) : KotlinOnlyTarget(project, platformType), KotlinTargetWithTests, @@ -38,6 +37,8 @@ constructor( override lateinit var testRuns: NamedDomainObjectContainer internal set + var irTarget: KotlinJsIrTarget? = null + val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName val testTask: TaskProvider get() = checkNotNull(project.locateTask(testTaskName)) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt index 264827b6965..494d0a6658d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -5,15 +5,19 @@ package org.jetbrains.kotlin.gradle.targets.js +import org.gradle.language.base.plugins.LifecycleBasePlugin +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.defaultSourceSetName import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.testTaskName +import java.util.concurrent.Callable open class KotlinJsTargetConfigurator(kotlinPluginVersion: String, val irConfigurator: KotlinJsIrTargetConfigurator?) : KotlinOnlyTargetConfigurator(true, true, kotlinPluginVersion), @@ -49,6 +53,43 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String, val irConfigu return Kotlin2JsSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion) } + override fun configureCompilationDefaults(target: KotlinJsTarget) { + val project = target.project + + target.compilations.all { compilation -> + defineConfigurationsForCompilation(compilation) + + if (createDefaultSourceSets) { + project.kotlinExtension.sourceSets.maybeCreate(compilation.defaultSourceSetName).also { sourceSet -> + compilation.source(sourceSet) // also adds dependencies, requires the configurations for target and source set to exist at this point + } + } + + configureResourceProcessing(compilation, project.files(Callable { compilation.allKotlinSourceSets.map { it.resources } })) + + createLifecycleTaskInternal(compilation) + } + } + + private fun createLifecycleTaskInternal(compilation: KotlinJsCompilation) { + val project = compilation.target.project + + compilation.output.classesDirs.from(project.files().builtBy(compilation.compileAllTaskName)) + + val compileAllTask = project.tasks.findByPath(compilation.compileAllTaskName) + if (compileAllTask != null) { + compileAllTask.dependsOn(compilation.compileKotlinTaskName) + compileAllTask.dependsOn(compilation.processResourcesTaskName) + } else { + project.tasks.create(compilation.compileAllTaskName).apply { + group = LifecycleBasePlugin.BUILD_GROUP + description = "Assembles outputs for compilation '${compilation.name}' of target '${compilation.target.name}'" + dependsOn(compilation.compileKotlinTaskName) + dependsOn(compilation.processResourcesTaskName) + } + } + } + override fun configureCompilations(target: KotlinJsTarget) { super.configureCompilations(target) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt index 451b31e5576..b1088554d73 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTargetConfigurator import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset @@ -30,38 +29,15 @@ open class KotlinJsTargetPreset( override fun instantiateTarget(): KotlinJsTarget { - val irTarget = KotlinJsIrTarget(project, platformType) + val irTarget = irPreset?.createTarget("JsIr") return project.objects.newInstance( KotlinJsTarget::class.java, project, - platformType, - irTarget - ) - } - - override fun createTarget(name: String): KotlinJsTarget { - val result = instantiateTarget().apply { - targetName = name - disambiguationClassifier = provideTargetDisambiguationClassifier(this) - preset = this@KotlinJsTargetPreset - - val compilationFactory = createCompilationFactory(this) - compilations = project.container(compilationFactory.itemClass, compilationFactory) - - if (irTarget != null) { - val irCompilationFactory = irPreset?.createCompilationFactory(irTarget)!! - irTarget.targetName = "${name}Ir" - irTarget.compilations = project.container(irCompilationFactory.itemClass, irCompilationFactory) - } + platformType + ).apply { + this.irTarget = irTarget } - - createKotlinTargetConfigurator().apply { - irConfigurator?.configureTarget(result.irTarget!!, true) - configureTarget(result) - } - - return result } override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator( @@ -93,7 +69,7 @@ class KotlinJsSingleTargetPreset( // In a Kotlin/JS single-platform project, we don't need any disambiguation suffixes or prefixes in the names: override fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget): String? = - irPreset?.let { "legacy${target.name}" } + null override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator( kotlinPluginVersion,