Compile against gradleApi()
This commit is contained in:
@@ -40,8 +40,8 @@ dependencies {
|
||||
compileOnly project(':kotlin-annotation-processing-gradle')
|
||||
|
||||
compileOnly 'com.android.tools.build:gradle:2.0.0'
|
||||
compileOnly 'org.codehaus.groovy:groovy-all:2.3.9'
|
||||
compileOnly 'org.jetbrains.kotlin:gradle-api:2.2'
|
||||
compileOnly 'org.codehaus.groovy:groovy-all:2.4.11'
|
||||
compileOnly gradleApi()
|
||||
|
||||
runtime project(path: ':kotlin-compiler-embeddable', 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.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.plugins.JavaPluginConvention
|
||||
import org.gradle.api.tasks.SourceSet
|
||||
@@ -39,15 +42,15 @@ class KotlinJsDcePlugin : Plugin<Project> {
|
||||
val dceTaskName = sourceSet.getTaskName(DCE_TASK_PREFIX, TASK_SUFFIX)
|
||||
val dceTask = project.tasks.create(dceTaskName, KotlinJsDce::class.java).also {
|
||||
it.dependsOn(kotlinTask)
|
||||
project.tasks.findByName("build").dependsOn(it)
|
||||
project.tasks.findByName("build")!!.dependsOn(it)
|
||||
}
|
||||
|
||||
project.afterEvaluate {
|
||||
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 dceInputFiles = UnionFileTree("dce-input", dceInputTrees)
|
||||
val dceInputFiles = dceInputTrees.reduce { acc: FileTree, tree -> acc + tree }
|
||||
|
||||
with (dceTask) {
|
||||
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.api.AndroidSourceSet
|
||||
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 org.gradle.api.*
|
||||
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.JavaCompile
|
||||
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.internal.*
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.getKaptGeneratedClassesDir
|
||||
import org.jetbrains.kotlin.gradle.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion
|
||||
import org.jetbrains.kotlin.gradle.utils.checkedReflection
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
@@ -285,7 +284,7 @@ internal class Kotlin2JsSourceSetProcessor(
|
||||
tasksProvider.createKotlinJSTask(project, taskName, sourceSet.name)
|
||||
|
||||
override fun doTargetSpecificProcessing() {
|
||||
project.tasks.findByName(sourceSet.classesTaskName).dependsOn(kotlinTask)
|
||||
project.tasks.findByName(sourceSet.classesTaskName)!!.dependsOn(kotlinTask)
|
||||
kotlinTask.source(kotlinSourceSet.kotlin)
|
||||
createCleanSourceMapTask()
|
||||
|
||||
@@ -310,7 +309,7 @@ internal class Kotlin2JsSourceSetProcessor(
|
||||
kotlinTask.destinationDir = outputDir
|
||||
|
||||
if (!isSeparateClassesDirSupported) {
|
||||
sourceSet.output.setClassesDir(kotlinTask.destinationDir)
|
||||
sourceSet.output.setClassesDirCompatible(kotlinTask.destinationDir)
|
||||
}
|
||||
|
||||
appliedPlugins
|
||||
@@ -352,7 +351,7 @@ internal class KotlinCommonSourceSetProcessor(
|
||||
val appliedPlugins = subpluginEnvironment.addSubpluginOptions(
|
||||
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)
|
||||
project.tasks.findByName(sourceSet.jarTaskName)?.dependsOn(kotlinTask)
|
||||
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
|
||||
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
|
||||
kotlinTask.kaptOptions.annotationsFile?.let { javaTask.inputs.file(it) }
|
||||
kotlinTask.kaptOptions.annotationsFile?.let { javaTask.inputsCompatible.fileCompatible(it) }
|
||||
|
||||
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