Minor cleanup in Gradle plugin.

This commit is contained in:
Zalim Bashorov
2014-12-23 18:11:50 +03:00
parent 5e495d6bd9
commit eac0e99e65
2 changed files with 31 additions and 52 deletions
@@ -36,24 +36,23 @@ import org.gradle.api.initialization.dsl.ScriptHandler
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
import javax.inject.Inject import javax.inject.Inject
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.gradle.api.tasks.Copy
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import kotlin.properties.Delegates import kotlin.properties.Delegates
import org.gradle.api.tasks.Delete import org.gradle.api.tasks.Delete
import org.codehaus.groovy.runtime.MethodClosure
import groovy.lang.Closure import groovy.lang.Closure
import org.gradle.api.artifacts.ProjectDependency
val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations" val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations"
abstract class KotlinSourceSetProcessor<T : AbstractCompile>(val project: ProjectInternal, abstract class KotlinSourceSetProcessor<T : AbstractCompile>(
val javaBasePlugin: JavaBasePlugin, val project: ProjectInternal,
val sourceSet: SourceSet, val javaBasePlugin: JavaBasePlugin,
val pluginName: String, val sourceSet: SourceSet,
val compileTaskNameSuffix: String, val pluginName: String,
val taskDescription: String, val compileTaskNameSuffix: String,
val compilerClass: Class<T>) { val taskDescription: String,
val compilerClass: Class<T>
) {
abstract protected fun doTargetSpecificProcessing() abstract protected fun doTargetSpecificProcessing()
val logger = Logging.getLogger(this.javaClass) val logger = Logging.getLogger(this.javaClass)
@@ -116,13 +115,14 @@ class Kotlin2JvmSourceSetProcessor(
project: ProjectInternal, project: ProjectInternal,
javaBasePlugin: JavaBasePlugin, javaBasePlugin: JavaBasePlugin,
sourceSet: SourceSet, sourceSet: SourceSet,
val scriptHandler: ScriptHandler) val scriptHandler: ScriptHandler
: KotlinSourceSetProcessor<KotlinCompile>( ) : KotlinSourceSetProcessor<KotlinCompile>(
project, javaBasePlugin, sourceSet, project, javaBasePlugin, sourceSet,
pluginName = "kotlin", pluginName = "kotlin",
compileTaskNameSuffix = "kotlin", compileTaskNameSuffix = "kotlin",
taskDescription = "Compiles the $sourceSet.kotlin.", taskDescription = "Compiles the $sourceSet.kotlin.",
compilerClass = javaClass()) { compilerClass = javaClass()
) {
override fun doTargetSpecificProcessing() { override fun doTargetSpecificProcessing() {
// store kotlin classes in separate directory. They will serve as class-path to java compiler // store kotlin classes in separate directory. They will serve as class-path to java compiler
@@ -138,7 +138,6 @@ class Kotlin2JvmSourceSetProcessor(
} }
} }
class Kotlin2JsSourceSetProcessor( class Kotlin2JsSourceSetProcessor(
project: ProjectInternal, project: ProjectInternal,
javaBasePlugin: JavaBasePlugin, javaBasePlugin: JavaBasePlugin,
@@ -149,18 +148,16 @@ class Kotlin2JsSourceSetProcessor(
pluginName = "kotlin2js", pluginName = "kotlin2js",
taskDescription = "Compiles the kotlin sources in $sourceSet to JavaScript.", taskDescription = "Compiles the kotlin sources in $sourceSet to JavaScript.",
compileTaskNameSuffix = "kotlin2Js", compileTaskNameSuffix = "kotlin2Js",
compilerClass = javaClass<Kotlin2JsCompile>()) { compilerClass = javaClass<Kotlin2JsCompile>()
) {
val copyKotlinJsTaskName = sourceSet.getTaskName("copy", "kotlinJs") val copyKotlinJsTaskName = sourceSet.getTaskName("copy", "kotlinJs")
val clean = project.getTasks().findByName("clean") val clean = project.getTasks().findByName("clean")
val build = project.getTasks().findByName("build") val build = project.getTasks().findByName("build")
val defaultKotlinDestinationDir = File(project.getBuildDir(), "kotlin2js/${sourceSetName}") val defaultKotlinDestinationDir = File(project.getBuildDir(), "kotlin2js/${sourceSetName}")
private fun kotlinTaskDestinationDir(): File? = kotlinTask.kotlinDestinationDir private fun kotlinTaskDestinationDir(): File? = kotlinTask.kotlinDestinationDir
private fun kotlinJsDestinationDir(): File? = if (kotlinTask.outputFile() == null) { private fun kotlinJsDestinationDir(): File? = kotlinTask.outputFile()?.let { File(it).directory }
null
} else {
File(kotlinTask.outputFile()).directory
}
private fun copyKotlinJsTaskOutput(): String? = if (kotlinJsDestinationDir() == null) { private fun copyKotlinJsTaskOutput(): String? = if (kotlinJsDestinationDir() == null) {
null null
@@ -233,11 +230,9 @@ abstract class AbstractKotlinPlugin [Inject] (val scriptHandler: ScriptHandler)
open protected fun configureSourceSetDefaults(project: ProjectInternal, open protected fun configureSourceSetDefaults(project: ProjectInternal,
javaBasePlugin: JavaBasePlugin, javaBasePlugin: JavaBasePlugin,
javaPluginConvention: JavaPluginConvention) { javaPluginConvention: JavaPluginConvention) {
javaPluginConvention.getSourceSets()?.all(object : Action<SourceSet> { javaPluginConvention.getSourceSets()?.all(Action<SourceSet> { sourceSet ->
override fun execute(sourceSet: SourceSet?) { if (sourceSet != null) {
if (sourceSet != null) { buildSourceSetProcessor(project, javaBasePlugin, sourceSet).run()
buildSourceSetProcessor(project, javaBasePlugin, sourceSet).run()
}
} }
}) })
} }
@@ -253,11 +248,7 @@ abstract class AbstractKotlinPlugin [Inject] (val scriptHandler: ScriptHandler)
kdoc.setSource(mainSourceSet.getConvention().getExtensionsAsDynamicObject().getProperty("kotlin")) kdoc.setSource(mainSourceSet.getConvention().getExtensionsAsDynamicObject().getProperty("kotlin"))
} }
project.getTasks().withType(javaClass<KDoc>(), object : Action<KDoc> { project.getTasks().withType(javaClass<KDoc>()) { it!!.destinationDir = File(javaPluginConvention.getDocsDir(), "kdoc") }
override fun execute(task: KDoc?) {
task!!.destinationDir = File(javaPluginConvention.getDocsDir(), "kdoc")
}
})
} }
public val KDOC_TASK_NAME: String = "kdoc" public val KDOC_TASK_NAME: String = "kdoc"
@@ -265,7 +256,7 @@ abstract class AbstractKotlinPlugin [Inject] (val scriptHandler: ScriptHandler)
open class KotlinPlugin [Inject] (scriptHandler: ScriptHandler) : AbstractKotlinPlugin(scriptHandler) { open class KotlinPlugin [Inject] (scriptHandler: ScriptHandler) : AbstractKotlinPlugin(scriptHandler) {
override fun buildSourceSetProcessor(project: ProjectInternal, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet): KotlinSourceSetProcessor<KotlinCompile> = override fun buildSourceSetProcessor(project: ProjectInternal, javaBasePlugin: JavaBasePlugin, sourceSet: SourceSet) =
Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, scriptHandler) Kotlin2JvmSourceSetProcessor(project, javaBasePlugin, sourceSet, scriptHandler)
} }
@@ -308,7 +299,7 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler) : Plu
(ext as ExtensionAware).getExtensions().add("kotlinOptions", K2JVMCompilerArguments()) (ext as ExtensionAware).getExtensions().add("kotlinOptions", K2JVMCompilerArguments())
project afterEvaluate { (project: Project?): Unit -> project afterEvaluate { project ->
if (project != null) { if (project != null) {
val testVariants = ext.getTestVariants()!! val testVariants = ext.getTestVariants()!!
processVariants(testVariants, project, ext) processVariants(testVariants, project, ext)
@@ -344,7 +335,7 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler) : Plu
val buildTypeSourceSetName = AndroidGradleWrapper.getVariantName(variant) val buildTypeSourceSetName = AndroidGradleWrapper.getVariantName(variant)
logger.debug("Variant build type is [$buildTypeSourceSetName]") logger.debug("Variant build type is [$buildTypeSourceSetName]")
val buildTypeSourceSet: AndroidSourceSet? = sourceSets.findByName(buildTypeSourceSetName) val buildTypeSourceSet = sourceSets.findByName(buildTypeSourceSetName)
val javaTask = variant.getJavaCompile()!! val javaTask = variant.getJavaCompile()!!
val variantName = variant.getName() val variantName = variant.getName()
@@ -444,7 +435,7 @@ open class GradleUtils(val scriptHandler: ScriptHandler, val project: ProjectInt
val deps = coordinates map { dependencyHandler.create(it) } val deps = coordinates map { dependencyHandler.create(it) }
val configuration = configurationsContainer.detachedConfiguration(*deps.copyToArray()) val configuration = configurationsContainer.detachedConfiguration(*deps.copyToArray())
return configuration.getResolvedConfiguration().getFiles({true}) return configuration.getResolvedConfiguration().getFiles { true }
} }
public fun kotlinPluginVersion(): String = project.getProperties()["kotlin.gradle.plugin.version"] as String public fun kotlinPluginVersion(): String = project.getProperties()["kotlin.gradle.plugin.version"] as String
@@ -10,7 +10,6 @@ import java.util.HashSet
import org.jetbrains.kotlin.doc.KDocCompiler import org.jetbrains.kotlin.doc.KDocCompiler
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import java.util.ArrayList
import org.apache.commons.io.FilenameUtils import org.apache.commons.io.FilenameUtils
import org.jetbrains.jet.cli.jvm.K2JVMCompiler import org.jetbrains.jet.cli.jvm.K2JVMCompiler
import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments
@@ -26,21 +25,7 @@ import org.gradle.api.Project
import org.jetbrains.jet.config.Services import org.jetbrains.jet.config.Services
import org.jetbrains.jet.cli.js.K2JSCompiler import org.jetbrains.jet.cli.js.K2JSCompiler
import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.k2js.config.MetaInfServices
import org.jetbrains.k2js.config.ClassPathLibraryDefintionsConfig
import org.jetbrains.jet.cli.common.CLIConfigurationKeys
import org.jetbrains.jet.config.CompilerConfiguration
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
import com.intellij.openapi.Disposable
import com.intellij.openapi.util.Disposer
import org.jetbrains.k2js.config.EcmaVersion
import org.gradle.api.tasks.Copy
import org.gradle.api.Action
import org.gradle.api.internal.project.ProjectInternal
import groovy.lang.Closure
import org.codehaus.groovy.runtime.MethodClosure import org.codehaus.groovy.runtime.MethodClosure
import org.gradle.api.DefaultTask
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.jet.cli.common.CLICompiler import org.jetbrains.jet.cli.common.CLICompiler
import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.highlighter.JavaFileType
@@ -169,7 +154,8 @@ public open class KotlinCompile() : AbstractKotlinCompile<K2JVMCompilerArguments
args.noParamAssertions = kotlinOptions.noParamAssertions args.noParamAssertions = kotlinOptions.noParamAssertions
} }
private fun getJavaSourceRoots(): Set<File> = getSource() private fun getJavaSourceRoots(): Set<File> =
getSource()
.filter { isJava(it) } .filter { isJava(it) }
.map { findSrcDirRoot(it) } .map { findSrcDirRoot(it) }
.filterNotNull() .filterNotNull()
@@ -177,6 +163,7 @@ public open class KotlinCompile() : AbstractKotlinCompile<K2JVMCompilerArguments
override fun afterCompileHook(args: K2JVMCompilerArguments) { override fun afterCompileHook(args: K2JVMCompilerArguments) {
getLogger().debug("Copying resulting files to classes") getLogger().debug("Copying resulting files to classes")
// Copy kotlin classes to all classes directory // Copy kotlin classes to all classes directory
val outputDirFile = File(args.destination!!) val outputDirFile = File(args.destination!!)
if (outputDirFile.exists()) { if (outputDirFile.exists()) {
@@ -195,7 +182,7 @@ public open class Kotlin2JsCompile() : AbstractKotlinCompile<K2JSCompilerArgumen
} }
public fun addLibraryFiles(vararg fs: String) { public fun addLibraryFiles(vararg fs: String) {
kotlinOptions.libraryFiles = (kotlinOptions.libraryFiles + fs).copyToArray() kotlinOptions.libraryFiles = (kotlinOptions.libraryFiles + (fs as Array<String>)).copyToArray()
} }
public fun addLibraryFiles(vararg fs: File) { public fun addLibraryFiles(vararg fs: File) {
@@ -212,6 +199,7 @@ public open class Kotlin2JsCompile() : AbstractKotlinCompile<K2JSCompilerArgumen
} }
override fun populateTargetSpecificArgs(args: K2JSCompilerArguments) { override fun populateTargetSpecificArgs(args: K2JSCompilerArguments) {
args.noStdlib = true
args.outputFile = outputFile() args.outputFile = outputFile()
args.outputPrefix = kotlinOptions.outputPrefix args.outputPrefix = kotlinOptions.outputPrefix
args.outputPostfix = kotlinOptions.outputPostfix args.outputPostfix = kotlinOptions.outputPostfix
@@ -220,7 +208,7 @@ public open class Kotlin2JsCompile() : AbstractKotlinCompile<K2JSCompilerArgumen
args.sourceMap = kotlinOptions.sourceMap args.sourceMap = kotlinOptions.sourceMap
if (args.outputFile == null) { if (args.outputFile == null) {
throw GradleException("${getName()}.kotlinOptions.outputFile must be set to a string.") throw GradleException("${getName()}.kotlinOptions.outputFile should be specified.")
} }
val outputDir = File(args.outputFile).directory val outputDir = File(args.outputFile).directory