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)}"
}
}