[Gradle, JS] Configure ir target in legacy plugin #2
This commit is contained in:
+4
-28
@@ -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(
|
||||
|
||||
+3
-2
@@ -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))
|
||||
|
||||
+41
@@ -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)
|
||||
|
||||
|
||||
+5
-29
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user