[Gradle] Extract configuration of KotlinJsIrLink to a class

Migrate KotlinJsIrLink to properties create Configurator class
to configure the task properties.
This commit is contained in:
Ivan Gavrilovic
2021-04-26 17:28:09 +01:00
committed by teamcityserver
parent 5eed9a4e6e
commit ad9f6e63b6
2 changed files with 24 additions and 32 deletions
@@ -5,28 +5,41 @@
package org.jetbrains.kotlin.gradle.targets.js.ir package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.file.FileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileTree import org.gradle.api.file.FileTree
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.newFileProperty
import java.io.File
import javax.inject.Inject import javax.inject.Inject
@CacheableTask @CacheableTask
open class KotlinJsIrLink @Inject constructor( abstract class KotlinJsIrLink @Inject constructor(
objectFactory: ObjectFactory objectFactory: ObjectFactory
): Kotlin2JsCompile(objectFactory) { ): Kotlin2JsCompile(objectFactory) {
class Configurator(compilation: KotlinCompilationData<*>): Kotlin2JsCompile.Configurator<KotlinJsIrLink>(compilation) {
override fun configure(task: KotlinJsIrLink) {
super.configure(task)
task.entryModule.fileProvider(
(compilation as KotlinJsIrCompilation).output.classesDirs.elements.map { it.single().asFile }
).disallowChanges()
task.kotlinOptionsProperty.value(KotlinJsOptionsImpl()).disallowChanges()
task.destinationDirectory.fileProvider(task.outputFile.map { it.parentFile }).disallowChanges()
}
}
// Link tasks are not affected by compiler plugin // Link tasks are not affected by compiler plugin
override val pluginClasspath: FileCollection = project.objects.fileCollection() override val pluginClasspath: ConfigurableFileCollection = project.objects.fileCollection()
@Input @Input
lateinit var mode: KotlinJsBinaryMode lateinit var mode: KotlinJsBinaryMode
@@ -35,34 +48,13 @@ open class KotlinJsIrLink @Inject constructor(
@Internal @Internal
override fun getSource(): FileTree = super.getSource() override fun getSource(): FileTree = super.getSource()
override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl()
@get:SkipWhenEmpty @get:SkipWhenEmpty
@get:InputDirectory @get:InputDirectory
@get:PathSensitive(PathSensitivity.RELATIVE) @get:PathSensitive(PathSensitivity.RELATIVE)
internal val entryModule: File by lazy { internal abstract val entryModule: DirectoryProperty
File(
(taskData.compilation as KotlinJsIrCompilation)
.output
.classesDirs
.asPath
)
}
override fun skipCondition(): Boolean = override fun skipCondition(): Boolean {
!entryModule.exists() return !entryModule.get().asFile.exists()
override fun getDestinationDir(): File {
return if (kotlinOptions.outputFile == null) {
super.getDestinationDir()
} else {
outputFile.parentFile
}
}
@OutputFile
val outputFileProperty: RegularFileProperty = project.newFileProperty {
outputFile
} }
override fun setupCompilerArgs(args: K2JSCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) { override fun setupCompilerArgs(args: K2JSCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) {
@@ -80,6 +72,6 @@ open class KotlinJsIrLink @Inject constructor(
private fun KotlinJsOptions.configureOptions(vararg additionalCompilerArgs: String) { private fun KotlinJsOptions.configureOptions(vararg additionalCompilerArgs: String) {
freeCompilerArgs += additionalCompilerArgs.toList() + freeCompilerArgs += additionalCompilerArgs.toList() +
PRODUCE_JS + PRODUCE_JS +
"$ENTRY_IR_MODULE=${entryModule.canonicalPath}" "$ENTRY_IR_MODULE=${entryModule.get().asFile.canonicalPath}"
} }
} }
@@ -14,7 +14,7 @@ import java.io.File
import javax.inject.Inject import javax.inject.Inject
@CacheableTask @CacheableTask
internal open class KotlinJsIrLinkWithWorkers internal abstract class KotlinJsIrLinkWithWorkers
@Inject @Inject
constructor( constructor(
objectFactory: ObjectFactory, objectFactory: ObjectFactory,