Partial fix for the processor path not being set up properly.

Issues: #KT-17255
This commit is contained in:
Sergey Igushkin
2017-04-05 16:21:25 +03:00
parent e7e29f2651
commit 80daae90e3
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.gradle.internal
import com.android.build.gradle.BaseExtension import com.android.build.gradle.BaseExtension
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.UnknownDomainObjectException import org.gradle.api.UnknownDomainObjectException
import org.gradle.api.file.FileCollection
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.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
@@ -168,7 +169,7 @@ class AnnotationProcessingManager(
generateAnnotationProcessorStubs(javaTask, annotationProcessorFqNames, wrappersDirectory) generateAnnotationProcessorStubs(javaTask, annotationProcessorFqNames, wrappersDirectory)
val processorPath = setOf(wrappersDirectory) + aptFiles val processorPath = setOf(wrappersDirectory) + aptFiles
setProcessorPath(javaTask, (processorPath + javaTask.classpath).joinToString(File.pathSeparator)) setProcessorPath(javaTask, (processorPath + javaTask.classpath))
if (aptOutputDir.exists()) { if (aptOutputDir.exists()) {
aptOutputDir.deleteRecursively() aptOutputDir.deleteRecursively()
@@ -265,11 +266,22 @@ class AnnotationProcessingManager(
} }
} }
private fun setProcessorPath(javaTask: JavaCompile, path: String) { private fun setProcessorPath(javaTask: JavaCompile, path: Iterable<File>) {
javaTask.addCompilerArgument("-processorpath") { prevValue -> javaTask.addCompilerArgument("-processorpath") { prevValue ->
if (prevValue != null) if (prevValue != null)
javaTask.logger.warn("Processor path was modified by kapt. Previous value = $prevValue") javaTask.logger.warn("Processor path was modified by kapt. Previous value = $prevValue")
path path.joinToString(File.pathSeparator)
}
// Android Gradle plugin ignores -processorpath: starting with 2.4.0-alpha3, it works with its own options
trySetProcessorPathForAndroid(javaTask, path)
}
private fun trySetProcessorPathForAndroid(javaTask: JavaCompile, path: Iterable<File>) {
val optionsClass = javaTask.options.javaClass
try {
val setPath = optionsClass.getMethod("setAnnotationProcessorPath", FileCollection::class.java)
setPath(javaTask.options, javaTask.project.files(path))
} catch (_: NoSuchMethodException) {
} }
} }