[Gradle, JS] Configure ir target in legacy plugin #2

This commit is contained in:
Ilya Goncharov
2020-01-21 13:21:16 +03:00
parent 43ab4ad8e8
commit b37c2a05fd
4 changed files with 53 additions and 59 deletions
@@ -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<Delete>(taskName) {
it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap }
it.delete(object : Closure<String>(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<Delete>(taskName) {
it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap }
it.delete(object : Closure<String>(this) {
override fun call(): String? = (kotlinTask.get().property("outputFile") as File).canonicalPath + ".map"
})
}
project.tasks.findByName("clean")?.dependsOn(taskName)
}
}
internal class KotlinCommonSourceSetProcessor(
@@ -29,8 +29,7 @@ open class KotlinJsTarget
@Inject
constructor(
project: Project,
platformType: KotlinPlatformType,
val irTarget: KotlinJsIrTarget?
platformType: KotlinPlatformType
) :
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType),
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
@@ -38,6 +37,8 @@ constructor(
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
internal set
var irTarget: KotlinJsIrTarget? = null
val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName
val testTask: TaskProvider<KotlinTestReport>
get() = checkNotNull(project.locateTask(testTaskName))
@@ -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<KotlinJsCompilation, KotlinJsTarget>(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)
@@ -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<KotlinJsCompilation>): String? =
irPreset?.let { "legacy${target.name}" }
null
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator(
kotlinPluginVersion,