Provide default output JS file in Kotlin Gradle plugin

This commit is contained in:
Alexey Tsvetkov
2016-12-08 22:39:51 +03:00
parent 232b40eb36
commit 93fa27a195
4 changed files with 12 additions and 9 deletions
@@ -66,12 +66,12 @@ class Kotlin2JsGradlePluginIT : BaseGradleIT() {
}
@Test
fun testNoOutputFileFails() {
fun testDefaultOutputFile() {
val project = Project("kotlin2JsNoOutputFileProject", "2.10")
project.build("build") {
assertFailed()
assertReportExists()
assertContains("compileKotlin2Js.kotlinOptions.outputFile should be specified.")
assertSuccessful()
assertFileExists("build/classes/main/kotlin2JsNoOutputFileProject_main.js")
}
}
@@ -55,7 +55,8 @@ internal abstract class KotlinSourceSetProcessor<T : AbstractKotlinCompile<*>>(
protected val sourceRootDir: String = "src/$sourceSetName/kotlin"
protected val kotlinSourceSet: KotlinSourceSet = createKotlinSourceSet()
protected val kotlinTask: T = createKotlinCompileTask()
protected abstract val defaultKotlinDestinationDir: File
protected open val defaultKotlinDestinationDir: File
get() = sourceSet.output.classesDir
fun run() {
addKotlinDirSetToSources()
@@ -183,9 +184,6 @@ internal class Kotlin2JsSourceSetProcessor(
taskDescription = "Compiles the kotlin sources in $sourceSet to JavaScript.",
compileTaskNameSuffix = "kotlin2Js"
) {
override val defaultKotlinDestinationDir: File
get() = File(project.buildDir, "kotlin2js/$sourceSetName")
private val clean = project.tasks.findByName("clean")
private val build = project.tasks.findByName("build")
@@ -20,6 +20,7 @@ import org.codehaus.groovy.runtime.MethodClosure
import org.gradle.api.GradleException
import org.gradle.api.Task
import org.gradle.api.logging.Logger
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.compile.AbstractCompile
@@ -299,6 +300,9 @@ open class Kotlin2JsCompile() : AbstractKotlinCompile<K2JSCompilerArguments>(),
var compilerJarFile: File? = null
private val defaultOutputFile: File
get() = File(destinationDir, "$moduleName.js")
@Suppress("unused")
val outputFile: String?
get() = kotlinOptions.outputFile
@@ -340,7 +344,7 @@ open class Kotlin2JsCompile() : AbstractKotlinCompile<K2JSCompilerArguments>(),
args.freeArgs = args.freeArgs + sourceRoots.kotlinSourceFiles.map { it.absolutePath }
if (args.outputFile == null) {
throw GradleException("$name.kotlinOptions.outputFile should be specified.")
args.outputFile = defaultOutputFile.canonicalPath
}
logger.kotlinDebug("compiling with args ${ArgumentUtils.convertArgumentsToStringList(args)}")
@@ -33,6 +33,7 @@ internal open class KotlinTasksProvider {
fun createKotlinJSTask(project: Project, name: String, sourceSetName: String): Kotlin2JsCompile =
project.tasks.create(name, Kotlin2JsCompile::class.java).apply {
this.sourceSetName = sourceSetName
friendTaskName = taskToFriendTaskMapper[this]
}