Compile against gradleApi()
This commit is contained in:
@@ -40,8 +40,8 @@ dependencies {
|
|||||||
compileOnly project(':kotlin-annotation-processing-gradle')
|
compileOnly project(':kotlin-annotation-processing-gradle')
|
||||||
|
|
||||||
compileOnly 'com.android.tools.build:gradle:2.0.0'
|
compileOnly 'com.android.tools.build:gradle:2.0.0'
|
||||||
compileOnly 'org.codehaus.groovy:groovy-all:2.3.9'
|
compileOnly 'org.codehaus.groovy:groovy-all:2.4.11'
|
||||||
compileOnly 'org.jetbrains.kotlin:gradle-api:2.2'
|
compileOnly gradleApi()
|
||||||
|
|
||||||
runtime project(path: ':kotlin-compiler-embeddable', configuration: "runtimeJar")
|
runtime project(path: ':kotlin-compiler-embeddable', configuration: "runtimeJar")
|
||||||
runtime project(path: ':kotlin-annotation-processing-gradle', configuration: "runtimeJar")
|
runtime project(path: ':kotlin-annotation-processing-gradle', configuration: "runtimeJar")
|
||||||
|
|||||||
+6
-3
@@ -18,6 +18,9 @@ package org.jetbrains.kotlin.gradle.plugin
|
|||||||
|
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.Task
|
||||||
|
import org.gradle.api.file.FileTree
|
||||||
|
import org.gradle.api.internal.file.UnionFileCollection
|
||||||
import org.gradle.api.internal.file.UnionFileTree
|
import org.gradle.api.internal.file.UnionFileTree
|
||||||
import org.gradle.api.plugins.JavaPluginConvention
|
import org.gradle.api.plugins.JavaPluginConvention
|
||||||
import org.gradle.api.tasks.SourceSet
|
import org.gradle.api.tasks.SourceSet
|
||||||
@@ -39,15 +42,15 @@ class KotlinJsDcePlugin : Plugin<Project> {
|
|||||||
val dceTaskName = sourceSet.getTaskName(DCE_TASK_PREFIX, TASK_SUFFIX)
|
val dceTaskName = sourceSet.getTaskName(DCE_TASK_PREFIX, TASK_SUFFIX)
|
||||||
val dceTask = project.tasks.create(dceTaskName, KotlinJsDce::class.java).also {
|
val dceTask = project.tasks.create(dceTaskName, KotlinJsDce::class.java).also {
|
||||||
it.dependsOn(kotlinTask)
|
it.dependsOn(kotlinTask)
|
||||||
project.tasks.findByName("build").dependsOn(it)
|
project.tasks.findByName("build")!!.dependsOn(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
project.afterEvaluate {
|
project.afterEvaluate {
|
||||||
val outputDir = File(File(project.buildDir, DEFAULT_OUT_DIR), sourceSet.name)
|
val outputDir = File(File(project.buildDir, DEFAULT_OUT_DIR), sourceSet.name)
|
||||||
|
|
||||||
val configuration = project.configurations.findByName(sourceSet.compileConfigurationName)
|
val configuration = project.configurations.findByName(sourceSet.compileConfigurationName)!!
|
||||||
val dceInputTrees = listOf(project.fileTree(kotlinTask.outputFile)) + configuration.map { project.fileTree(it) }
|
val dceInputTrees = listOf(project.fileTree(kotlinTask.outputFile)) + configuration.map { project.fileTree(it) }
|
||||||
val dceInputFiles = UnionFileTree("dce-input", dceInputTrees)
|
val dceInputFiles = dceInputTrees.reduce { acc: FileTree, tree -> acc + tree }
|
||||||
|
|
||||||
with (dceTask) {
|
with (dceTask) {
|
||||||
classpath = sourceSet.compileClasspath
|
classpath = sourceSet.compileClasspath
|
||||||
|
|||||||
+9
-10
@@ -4,6 +4,9 @@ import com.android.build.gradle.BaseExtension
|
|||||||
import com.android.build.gradle.BasePlugin
|
import com.android.build.gradle.BasePlugin
|
||||||
import com.android.build.gradle.api.AndroidSourceSet
|
import com.android.build.gradle.api.AndroidSourceSet
|
||||||
import com.android.builder.model.SourceProvider
|
import com.android.builder.model.SourceProvider
|
||||||
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
|
import com.intellij.openapi.util.text.StringUtil.compareVersionNumbers
|
||||||
|
import com.intellij.util.ReflectionUtil
|
||||||
import groovy.lang.Closure
|
import groovy.lang.Closure
|
||||||
import org.gradle.api.*
|
import org.gradle.api.*
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
@@ -22,15 +25,11 @@ import org.gradle.api.tasks.SourceSetOutput
|
|||||||
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.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
|
||||||
import com.intellij.openapi.util.text.StringUtil.compareVersionNumbers
|
|
||||||
import com.intellij.util.ReflectionUtil
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
||||||
import org.jetbrains.kotlin.gradle.internal.*
|
import org.jetbrains.kotlin.gradle.internal.*
|
||||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.getKaptGeneratedClassesDir
|
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.getKaptGeneratedClassesDir
|
||||||
import org.jetbrains.kotlin.gradle.tasks.*
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.checkedReflection
|
|
||||||
import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation
|
import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
@@ -285,7 +284,7 @@ internal class Kotlin2JsSourceSetProcessor(
|
|||||||
tasksProvider.createKotlinJSTask(project, taskName, sourceSet.name)
|
tasksProvider.createKotlinJSTask(project, taskName, sourceSet.name)
|
||||||
|
|
||||||
override fun doTargetSpecificProcessing() {
|
override fun doTargetSpecificProcessing() {
|
||||||
project.tasks.findByName(sourceSet.classesTaskName).dependsOn(kotlinTask)
|
project.tasks.findByName(sourceSet.classesTaskName)!!.dependsOn(kotlinTask)
|
||||||
kotlinTask.source(kotlinSourceSet.kotlin)
|
kotlinTask.source(kotlinSourceSet.kotlin)
|
||||||
createCleanSourceMapTask()
|
createCleanSourceMapTask()
|
||||||
|
|
||||||
@@ -310,7 +309,7 @@ internal class Kotlin2JsSourceSetProcessor(
|
|||||||
kotlinTask.destinationDir = outputDir
|
kotlinTask.destinationDir = outputDir
|
||||||
|
|
||||||
if (!isSeparateClassesDirSupported) {
|
if (!isSeparateClassesDirSupported) {
|
||||||
sourceSet.output.setClassesDir(kotlinTask.destinationDir)
|
sourceSet.output.setClassesDirCompatible(kotlinTask.destinationDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
appliedPlugins
|
appliedPlugins
|
||||||
@@ -352,7 +351,7 @@ internal class KotlinCommonSourceSetProcessor(
|
|||||||
val appliedPlugins = subpluginEnvironment.addSubpluginOptions(
|
val appliedPlugins = subpluginEnvironment.addSubpluginOptions(
|
||||||
project, kotlinTask, kotlinTask, null, null, sourceSet)
|
project, kotlinTask, kotlinTask, null, null, sourceSet)
|
||||||
|
|
||||||
project.tasks.findByName(sourceSet.classesTaskName).dependsOn(kotlinTask)
|
project.tasks.findByName(sourceSet.classesTaskName)!!.dependsOn(kotlinTask)
|
||||||
// can be missing (e.g. in case of tests)
|
// can be missing (e.g. in case of tests)
|
||||||
project.tasks.findByName(sourceSet.jarTaskName)?.dependsOn(kotlinTask)
|
project.tasks.findByName(sourceSet.jarTaskName)?.dependsOn(kotlinTask)
|
||||||
val javaTask = project.tasks.findByName(sourceSet.compileJavaTaskName)
|
val javaTask = project.tasks.findByName(sourceSet.compileJavaTaskName)
|
||||||
@@ -677,9 +676,9 @@ internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractComp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make Gradle check if the javaTask is up-to-date based on the Kotlin classes
|
// Make Gradle check if the javaTask is up-to-date based on the Kotlin classes
|
||||||
javaTask.inputs.dir(kotlinTask.destinationDir)
|
javaTask.inputsCompatible.dirCompatible(kotlinTask.destinationDir)
|
||||||
// Also, use kapt1 annotations file for up-to-date check since annotation processing is done with javac
|
// Also, use kapt1 annotations file for up-to-date check since annotation processing is done with javac
|
||||||
kotlinTask.kaptOptions.annotationsFile?.let { javaTask.inputs.file(it) }
|
kotlinTask.kaptOptions.annotationsFile?.let { javaTask.inputsCompatible.fileCompatible(it) }
|
||||||
|
|
||||||
javaTask.dependsOn(kotlinTask)
|
javaTask.dependsOn(kotlinTask)
|
||||||
/*
|
/*
|
||||||
|
|||||||
+96
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.utils
|
||||||
|
|
||||||
|
import org.gradle.api.Task
|
||||||
|
import org.gradle.api.tasks.SourceSetOutput
|
||||||
|
import org.gradle.api.tasks.TaskInputs
|
||||||
|
import org.gradle.api.tasks.TaskOutputs
|
||||||
|
|
||||||
|
internal val Task.inputsCompatible: TaskInputs get() = inputs
|
||||||
|
|
||||||
|
internal val Task.outputsCompatible: TaskOutputs get() = outputs
|
||||||
|
|
||||||
|
private val filesMethod by lazy {
|
||||||
|
TaskInputs::class.java.methods.first {
|
||||||
|
it.name == "files" && it.parameterTypes.contentEquals(arrayOf(Array<Any>::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskInputs.filesCompatible(vararg files: Any) {
|
||||||
|
filesMethod(this, files)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val propertyMethod by lazy {
|
||||||
|
TaskInputs::class.java.methods.first {
|
||||||
|
it.name == "property" && it.parameterTypes.contentEquals(arrayOf(String::class.java, Any::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskInputs.propertyCompatible(name: String, value: Any) {
|
||||||
|
propertyMethod(this, name, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val outputsDirMethod by lazy {
|
||||||
|
TaskOutputs::class.java.methods.first {
|
||||||
|
it.name == "dir" && it.parameterTypes.contentEquals(arrayOf(Any::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskOutputs.dirCompatible(value: Any) {
|
||||||
|
outputsDirMethod(this, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val outputsFilesMethod by lazy {
|
||||||
|
TaskOutputs::class.java.methods.first {
|
||||||
|
it.name == "files" && it.parameterTypes.contentEquals(arrayOf(Array<Any>::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskOutputs.filesCompatible(vararg value: Any) {
|
||||||
|
outputsFilesMethod(this, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val fileMethod by lazy {
|
||||||
|
TaskInputs::class.java.methods.first {
|
||||||
|
it.name == "file" && it.parameterTypes.contentEquals(arrayOf(Any::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskInputs.fileCompatible(filePath: Any) {
|
||||||
|
fileMethod(this, filePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val inputsDirMethod by lazy {
|
||||||
|
TaskInputs::class.java.methods.first {
|
||||||
|
it.name == "dir" && it.parameterTypes.contentEquals(arrayOf(Any::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun TaskInputs.dirCompatible(dirPath: Any) {
|
||||||
|
inputsDirMethod(this, dirPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val setClassesDirMethod by lazy {
|
||||||
|
SourceSetOutput::class.java.methods.first {
|
||||||
|
it.name == "setClassesDir" && it.parameterTypes.contentEquals(arrayOf(Any::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun SourceSetOutput.setClassesDirCompatible(dirPath: Any) {
|
||||||
|
setClassesDirMethod(this, dirPath)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user