[Gradle, JS] Each task configure your own dceOutputFileApplier

This commit is contained in:
Ilya Goncharov
2019-10-21 19:03:10 +03:00
parent 2d026e7973
commit eb7fe6b0a4
@@ -34,7 +34,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
KotlinJsBrowserDsl {
private val dceConfigurations: MutableList<KotlinJsDce.() -> Unit> = mutableListOf()
private val dceWebpackEntryAppliers: MutableList<KotlinJsDce.(File) -> Unit> = mutableListOf()
private lateinit var buildVariants: NamedDomainObjectContainer<BuildVariant>
@@ -75,6 +74,10 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
val project = compilation.target.project
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
val compileKotlinTask = compilation.compileKotlinTask
val dceOutputFileAppliers: MutableList<KotlinJsDce.(File) -> Unit> = mutableListOf()
buildVariants.all { buildVariant ->
val kind = buildVariant.kind
val runTask = project.registerTask<KotlinWebpack>(
@@ -83,7 +86,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
"run"
)
) {
val compileKotlinTask = compilation.compileKotlinTask
it.dependsOn(
nodeJs.npmInstallTask,
target.project.tasks.getByName(compilation.processResourcesTaskName)
@@ -104,7 +106,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
when (kind) {
BuildVariantKind.RELEASE -> {
dceWebpackEntryAppliers.add { file ->
dceOutputFileAppliers.add { file ->
it.entry = file
}
it.resolveFromModulesFirst = true
@@ -116,6 +118,12 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
}
}
dceTaskProvider.configure {
dceOutputFileAppliers.forEach { dceOutputFileApplier ->
it.dceOutputFileApplier(it.destinationDir.resolve(compileKotlinTask.outputFile.name))
}
}
if (kind == BuildVariantKind.DEBUG) {
target.runTask.dependsOn(runTask)
}
@@ -129,6 +137,10 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
val project = compilation.target.project
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
val compileKotlinTask = compilation.compileKotlinTask
val dceOutputFileAppliers: MutableList<KotlinJsDce.(File) -> Unit> = mutableListOf()
buildVariants.all { buildVariant ->
val kind = buildVariant.kind
val webpackTask = project.registerTask<KotlinWebpack>(
@@ -138,7 +150,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
)
) {
val compileKotlinTask = compilation.compileKotlinTask
it.dependsOn(
nodeJs.npmInstallTask
)
@@ -150,7 +161,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
when (kind) {
BuildVariantKind.RELEASE -> {
dceWebpackEntryAppliers.add { file ->
dceOutputFileAppliers.add { file ->
it.entry = file
}
it.resolveFromModulesFirst = true
@@ -162,6 +173,12 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
}
}
dceTaskProvider.configure {
dceOutputFileAppliers.forEach { dceOutputFileApplier ->
it.dceOutputFileApplier(it.destinationDir.resolve(compileKotlinTask.outputFile.name))
}
}
if (kind == BuildVariantKind.RELEASE) {
project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(webpackTask)
}
@@ -193,10 +210,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) }
?: compilation.npmProject.dir.resolve(DCE_DIR)
dceWebpackEntryAppliers.forEach { entryApplier ->
it.entryApplier(it.destinationDir.resolve(kotlinTask.outputFile.name))
}
it.source(kotlinTask.outputFile)
}
}