[Gradle, JS] Continue to migrate on ir compiler
- Create own inheritor of KotlinJsCompilation with specific tasks for production and development - Copy TargetConfigurator for IR purposes
This commit is contained in:
+74
-5
@@ -22,7 +22,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
|
||||
@@ -308,12 +311,78 @@ internal class Kotlin2JsSourceSetProcessor(
|
||||
|
||||
private fun registerCleanSourceMapTask() {
|
||||
val taskName = kotlinCompilation.composeName("clean", "sourceMap")
|
||||
registerTask(project, taskName, Delete::class.java) {
|
||||
project.createOrRegisterTask(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(
|
||||
project: Project,
|
||||
tasksProvider: KotlinTasksProvider,
|
||||
kotlinCompilation: AbstractKotlinCompilation<*>,
|
||||
private val kotlinPluginVersion: String
|
||||
) : KotlinSourceSetProcessor<Kotlin2JsCompile>(
|
||||
project, tasksProvider, taskDescription = "Compiles the Kotlin sources in $kotlinCompilation to JavaScript.",
|
||||
kotlinCompilation = kotlinCompilation
|
||||
) {
|
||||
override fun doRegisterTask(
|
||||
project: Project,
|
||||
taskName: String,
|
||||
configureAction: (Kotlin2JsCompile) -> (Unit)
|
||||
): TaskProvider<out Kotlin2JsCompile> =
|
||||
tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction)
|
||||
|
||||
override fun doTargetSpecificProcessing() {
|
||||
project.tasks.named(kotlinCompilation.compileAllTaskName).configure {
|
||||
it.dependsOn(kotlinTask)
|
||||
}
|
||||
|
||||
registerCleanSourceMapTask()
|
||||
|
||||
if (kotlinCompilation is KotlinWithJavaCompilation<*>) {
|
||||
kotlinCompilation.javaSourceSet.clearJavaSrcDirs()
|
||||
}
|
||||
|
||||
// outputFile can be set later during the configuration phase, get it only after the phase:
|
||||
project.runOnceAfterEvaluated("Kotlin2JsSourceSetProcessor.doTargetSpecificProcessing", kotlinTask) {
|
||||
val kotlinTaskInstance = kotlinTask.get()
|
||||
kotlinTaskInstance.kotlinOptions.outputFile = kotlinTaskInstance.outputFile.absolutePath
|
||||
val outputDir = kotlinTaskInstance.outputFile.parentFile
|
||||
|
||||
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion)
|
||||
val appliedPlugins = subpluginEnvironment.addSubpluginOptions(
|
||||
project, kotlinTaskInstance, null, null, null, kotlinCompilation
|
||||
)
|
||||
|
||||
if (outputDir.isParentOf(project.rootDir))
|
||||
throw InvalidUserDataException(
|
||||
"The output directory '$outputDir' (defined by outputFile of $kotlinTaskInstance) contains or " +
|
||||
"matches the project root directory '${project.rootDir}'.\n" +
|
||||
"Gradle will not be able to build the project because of the root directory lock.\n" +
|
||||
"To fix this, consider using the default outputFile location instead of providing it explicitly."
|
||||
)
|
||||
|
||||
kotlinTaskInstance.destinationDir = outputDir
|
||||
|
||||
appliedPlugins
|
||||
.flatMap { it.getSubpluginKotlinTasks(project, kotlinTaskInstance) }
|
||||
.forEach { task -> kotlinCompilation.allKotlinSourceSets.forEach { sourceSet -> task.source(sourceSet.kotlin) } }
|
||||
}
|
||||
}
|
||||
|
||||
private fun registerCleanSourceMapTask() {
|
||||
val taskName = kotlinCompilation.composeName("clean", "sourceMap")
|
||||
project.createOrRegisterTask(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)
|
||||
}
|
||||
}
|
||||
@@ -446,12 +515,12 @@ internal abstract class AbstractKotlinPlugin(
|
||||
return
|
||||
}
|
||||
val inspectTask =
|
||||
registerTask(project, "inspectClassesForKotlinIC", InspectClassesForMultiModuleIC::class.java) {
|
||||
project.createOrRegisterTask("inspectClassesForKotlinIC", {
|
||||
it.sourceSetName = SourceSet.MAIN_SOURCE_SET_NAME
|
||||
it.archivePath.set(project.provider { jarTask.archivePathCompatible.canonicalPath })
|
||||
it.archiveName.set(project.provider { jarTask.archiveNameCompatible })
|
||||
it.dependsOn(classesTask)
|
||||
}
|
||||
})
|
||||
jarTask.dependsOn(inspectTask)
|
||||
}
|
||||
|
||||
@@ -1029,7 +1098,7 @@ internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractComp
|
||||
* so it's only safe to modify javaTask.classpath right before its usage
|
||||
*/
|
||||
// todo: remove?
|
||||
javaTask.appendClasspathDynamically(kotlinTask.destinationDir!!)
|
||||
javaTask.appendClasspathDynamically(kotlinTask.destinationDir)
|
||||
}
|
||||
|
||||
private fun ifKaptEnabled(project: Project, block: () -> Unit) {
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||
|
||||
class KotlinJsCompilation(
|
||||
open class KotlinJsCompilation(
|
||||
target: KotlinTarget,
|
||||
name: String
|
||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(target, name), KotlinCompilationWithResources<KotlinJsOptions> {
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||
|
||||
class KotlinJsIrCompilation(
|
||||
target: KotlinTarget,
|
||||
name: String
|
||||
) : KotlinJsCompilation(target, name) {
|
||||
val productionCompilation: Kotlin2JsCompile =
|
||||
(target.project.tasks.getByName(compileKotlinTaskName) as Kotlin2JsCompile)
|
||||
|
||||
val developmentCompilation: Kotlin2JsCompile =
|
||||
(target.project.tasks.getByName(compileKotlinTaskName) as Kotlin2JsCompile)
|
||||
}
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJsIrSourceSetProcessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
|
||||
@@ -46,7 +46,7 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
|
||||
|
||||
override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> {
|
||||
val tasksProvider = KotlinTasksProvider(compilation.target.targetName)
|
||||
return Kotlin2JsSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion)
|
||||
return KotlinJsIrSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion)
|
||||
}
|
||||
|
||||
override fun configureCompilations(target: KotlinJsIrTarget) {
|
||||
|
||||
Reference in New Issue
Block a user