diff --git a/libraries/tools/kotlin-gradle-plugin/pom.xml b/libraries/tools/kotlin-gradle-plugin/pom.xml index af6d7e7f215..f01aa3e1063 100644 --- a/libraries/tools/kotlin-gradle-plugin/pom.xml +++ b/libraries/tools/kotlin-gradle-plugin/pom.xml @@ -26,6 +26,11 @@ 4.11 test + + commons-lang + commons-lang + 2.3 + com.google.guava guava diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 5504585efe0..da3f962b9d4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -30,6 +30,7 @@ import org.gradle.api.logging.Logger import org.gradle.api.logging.Logging import org.apache.commons.io.FileUtils import java.io.IOException +import org.apache.commons.lang.StringUtils public open class KotlinCompile(): AbstractCompile() { @@ -37,6 +38,9 @@ public open class KotlinCompile(): AbstractCompile() { val compiler = K2JVMCompiler() val logger = getLogger() + public val kotlinOptions: K2JVMCompilerArguments = K2JVMCompilerArguments() + + // override setSource to track source directory sets override fun setSource(source: Any?) { srcDirsRoots.clear() @@ -70,7 +74,7 @@ public open class KotlinCompile(): AbstractCompile() { override fun compile() { - val args = K2JVMCompilerArguments() + val args = kotlinOptions val javaSrcRoots = HashSet() val sources = ArrayList() @@ -92,19 +96,21 @@ public open class KotlinCompile(): AbstractCompile() { return } - args.setSourceDirs(sources.map { it.getAbsolutePath() }) + val customSources = args.getSourceDirs(); + if (customSources == null || customSources.isEmpty()) { + args.setSourceDirs(sources.map { it.getAbsolutePath() }) + } - val gradleClasspath = getClasspath() - val effectiveClassPath = (javaSrcRoots + gradleClasspath).makeString(File.pathSeparator) - args.setClasspath(effectiveClassPath) + if (StringUtils.isEmpty(kotlinOptions.classpath)) { + val gradleClasspath = getClasspath() + val effectiveClassPath = (javaSrcRoots + gradleClasspath).makeString(File.pathSeparator) + args.setClasspath(effectiveClassPath) + } val embeddedAnnotations = getAnnotations() - - args.outputDir = getDestinationDir()?.getPath() - args.noJdkAnnotations = true - args.annotations = embeddedAnnotations.getPath() - args.noStdlib = true + args.outputDir =if (StringUtils.isEmpty(kotlinOptions.outputDir)) { getDestinationDir()?.getPath() } else { kotlinOptions.outputDir } + args.annotations = if (StringUtils.isEmpty(kotlinOptions.annotations)) { embeddedAnnotations.getPath() } else { kotlinOptions.annotations } val logger = Logging.getLogger(getClass()) val messageCollector = GradleMessageCollector(logger) @@ -127,7 +133,7 @@ public open class KotlinCompile(): AbstractCompile() { fun getAnnotations(): File { val jdkAnnotations: String = "kotlin-jdk-annotations.jar" val jdkAnnotationsResource = Resources.getResource(jdkAnnotations) ?: - throw GradleException(jdkAnnotations + " not found in Kotlin gradle plugin classpath") + throw GradleException(jdkAnnotations + " not found in Kotlin gradle plugin classpath") val jdkAnnotationsTempDir = Files.createTempDir() val jdkAnnotationsFile = File(jdkAnnotationsTempDir, jdkAnnotations) @@ -231,10 +237,10 @@ class GradleMessageCollector(val logger : Logger): MessageCollector { val text = position + message when (severity) { - in CompilerMessageSeverity.VERBOSE -> logger.debug(text) - in CompilerMessageSeverity.ERRORS -> logger.error(text) - CompilerMessageSeverity.INFO -> logger.info(text) - else -> logger.warn(text) + in CompilerMessageSeverity.VERBOSE -> logger.debug(text) + in CompilerMessageSeverity.ERRORS -> logger.error(text) + CompilerMessageSeverity.INFO -> logger.info(text) + else -> logger.warn(text) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle index 9c5b7f1b94e..df08432fede 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle @@ -32,6 +32,12 @@ task show << { buildscript.configurations.classpath.each { println it } } + +compileKotlin { + kotlinOptions.annotations = "externalAnnotations" +} + + task wrapper(type: Wrapper) { gradleVersion="1.4" } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/externalAnnotations/com/google/common/base/annotations.xml b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/externalAnnotations/com/google/common/base/annotations.xml new file mode 100644 index 00000000000..be8ddab04a3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/externalAnnotations/com/google/common/base/annotations.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt index 710e6b06dc4..b3e99bbdd59 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt @@ -13,8 +13,8 @@ class KotlinGreetingJoiner(val greeter : Greeter) { } fun getJoinedGreeting() : String? { - val joiner = Joiner.on(" and ")?.skipNulls(); - return "${greeter.getGreeting()} ${joiner?.join(names)}" + val joiner = Joiner.on(" and ").skipNulls(); + return "${greeter.getGreeting()} ${joiner.join(names)}" } }