[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.plugins.MavenPluginConvention
|
||||||
import org.gradle.api.publish.PublishingExtension
|
import org.gradle.api.publish.PublishingExtension
|
||||||
import org.gradle.api.publish.maven.MavenPublication
|
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.AbstractCompile
|
||||||
import org.gradle.api.tasks.compile.JavaCompile
|
import org.gradle.api.tasks.compile.JavaCompile
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
@@ -308,12 +311,78 @@ internal class Kotlin2JsSourceSetProcessor(
|
|||||||
|
|
||||||
private fun registerCleanSourceMapTask() {
|
private fun registerCleanSourceMapTask() {
|
||||||
val taskName = kotlinCompilation.composeName("clean", "sourceMap")
|
val taskName = kotlinCompilation.composeName("clean", "sourceMap")
|
||||||
registerTask(project, taskName, Delete::class.java) {
|
project.createOrRegisterTask(taskName, {
|
||||||
it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap }
|
it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap }
|
||||||
it.delete(object : Closure<String>(this) {
|
it.delete(object : Closure<String>(this) {
|
||||||
override fun call(): String? = (kotlinTask.get().property("outputFile") as File).canonicalPath + ".map"
|
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)
|
project.tasks.findByName("clean")?.dependsOn(taskName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -446,12 +515,12 @@ internal abstract class AbstractKotlinPlugin(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
val inspectTask =
|
val inspectTask =
|
||||||
registerTask(project, "inspectClassesForKotlinIC", InspectClassesForMultiModuleIC::class.java) {
|
project.createOrRegisterTask("inspectClassesForKotlinIC", {
|
||||||
it.sourceSetName = SourceSet.MAIN_SOURCE_SET_NAME
|
it.sourceSetName = SourceSet.MAIN_SOURCE_SET_NAME
|
||||||
it.archivePath.set(project.provider { jarTask.archivePathCompatible.canonicalPath })
|
it.archivePath.set(project.provider { jarTask.archivePathCompatible.canonicalPath })
|
||||||
it.archiveName.set(project.provider { jarTask.archiveNameCompatible })
|
it.archiveName.set(project.provider { jarTask.archiveNameCompatible })
|
||||||
it.dependsOn(classesTask)
|
it.dependsOn(classesTask)
|
||||||
}
|
})
|
||||||
jarTask.dependsOn(inspectTask)
|
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
|
* so it's only safe to modify javaTask.classpath right before its usage
|
||||||
*/
|
*/
|
||||||
// todo: remove?
|
// todo: remove?
|
||||||
javaTask.appendClasspathDynamically(kotlinTask.destinationDir!!)
|
javaTask.appendClasspathDynamically(kotlinTask.destinationDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ifKaptEnabled(project: Project, block: () -> Unit) {
|
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.targets.js.npm.PackageJson
|
||||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||||
|
|
||||||
class KotlinJsCompilation(
|
open class KotlinJsCompilation(
|
||||||
target: KotlinTarget,
|
target: KotlinTarget,
|
||||||
name: String
|
name: String
|
||||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(target, name), KotlinCompilationWithResources<KotlinJsOptions> {
|
) : 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
|
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.KotlinOnlyTargetConfigurator
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
|
||||||
@@ -46,7 +46,7 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
|
|||||||
|
|
||||||
override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> {
|
override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> {
|
||||||
val tasksProvider = KotlinTasksProvider(compilation.target.targetName)
|
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) {
|
override fun configureCompilations(target: KotlinJsIrTarget) {
|
||||||
|
|||||||
Reference in New Issue
Block a user