From 11f7b45ce39ec834975c8eceb4e25f5a83721ad2 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 22 Jan 2015 16:31:44 +0300 Subject: [PATCH] Gradle: collect kotlin files from java source root --- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 5 ++- .../kotlin/gradle/plugin/KotlinPlugin.kt | 38 ++++++++++------ .../kotlin/gradle/KotlinGradlePluginIT.kt | 8 ++++ .../testProject/kotlinInJavaRoot/build.gradle | 43 +++++++++++++++++++ .../src/main/java/javaPackage/JavaClass.java | 15 +++++++ .../main/java/kotlinPackage/KotlinClass.kt | 14 ++++++ .../main/java2/javaPackage2/JavaClass2.java | 15 +++++++ .../main/java2/kotlinPackage2/KotlinClass2.kt | 14 ++++++ 8 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/javaPackage/JavaClass.java create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/kotlinPackage/KotlinClass.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/javaPackage2/JavaClass2.java create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/kotlinPackage2/KotlinClass2.kt diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index c0ada0cb9e3..fd3ee02464b 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.cli.common.CLICompiler import com.intellij.ide.highlighter.JavaFileType import org.jetbrains.kotlin.idea.JetFileType import org.jetbrains.kotlin.utils.LibraryUtils +import com.intellij.openapi.util.io.FileUtil val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations" @@ -121,7 +122,7 @@ public open class KotlinCompile() : AbstractKotlinCompile = + private fun getJavaSourceRoots(): Set = getSource() .filter { isJava(it) } .map { findSrcDirRoot(it) } @@ -160,7 +161,7 @@ public open class KotlinCompile() : AbstractKotlinCompile + if (project != null) { + for (dir in sourceSet.getJava().getSrcDirs()) { + kotlinDirSet?.srcDir(dir) + } + } + } } } @@ -332,19 +340,25 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val javaSourceList = ArrayList() + fun processSourceSet(javaSourceSet: AndroidSourceSet) { + val javaSrcDirs = AndroidGradleWrapper.getJavaSrcDirs(javaSourceSet) + javaSourceList.addAll(javaSrcDirs) + val testKotlinSource = getExtension(javaSourceSet, "kotlin") + val kotlinSDS = testKotlinSource.getKotlin() + for (dir in javaSrcDirs) { + kotlinSDS.srcDir(dir) + } + kotlinTask.source(kotlinSDS) + } + if (variant is TestVariant) { - javaSourceList.addAll(AndroidGradleWrapper.getJavaSrcDirs(testSourceSet)) - val testKotlinSource = getExtension(testSourceSet, "kotlin") - kotlinTask.source(testKotlinSource.getKotlin()) + processSourceSet(testSourceSet) } else { - javaSourceList.addAll(AndroidGradleWrapper.getJavaSrcDirs(mainSourceSet)) - val mainKotlinSource = getExtension(mainSourceSet, "kotlin") - kotlinTask.source(mainKotlinSource.getKotlin()) + processSourceSet(mainSourceSet) } if (null != buildTypeSourceSet) { - javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(buildTypeSourceSet)) - kotlinTask.source(getExtension(buildTypeSourceSet, "kotlin").getKotlin()) + processSourceSet(buildTypeSourceSet) } for (resourceFolder in AndroidGradleWrapper.getRClassFolder(variant)) { @@ -359,14 +373,12 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val defaultFlavourSourceSetName = flavourName + buildTypeSourceSetName.capitalize() val defaultFlavourSourceSet = sourceSets.findByName(defaultFlavourSourceSetName) if (defaultFlavourSourceSet != null) { - javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(defaultFlavourSourceSet)) - kotlinTask.source(getExtension(defaultFlavourSourceSet, "kotlin").getKotlin()) + processSourceSet(defaultFlavourSourceSet) } val flavourSourceSet = sourceSets.findByName(flavourName) if (flavourSourceSet != null) { - javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(flavourSourceSet)) - kotlinTask.source(getExtension(flavourSourceSet, "kotlin").getKotlin()) + processSourceSet(flavourSourceSet) } } } @@ -403,7 +415,7 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t } - + open class GradleUtils(val scriptHandler: ScriptHandler, val project: ProjectInternal) { public fun resolveDependencies(vararg coordinates: String): Collection { val dependencyHandler: DependencyHandler = scriptHandler.getDependencies() diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 81f1b177501..2896c26b286 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -50,4 +50,12 @@ class KotlinGradleIT: BaseGradleIT() { assertContains(":subproject:compileKotlin", ":subproject:compileTestKotlin") } } + + Test fun testKotlinInJavaRoot() { + Project("kotlinInJavaRoot", "1.6").build("build") { + assertSuccessful() + assertReportExists() + assertContains(":compileKotlin", ":compileTestKotlin") + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/build.gradle new file mode 100644 index 00000000000..b658cb9ed29 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/build.gradle @@ -0,0 +1,43 @@ +buildscript { + repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } + } + dependencies { + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' + } +} + +apply plugin: "kotlin" +apply plugin: 'java' + +repositories { + maven { + url 'file://' + pathToKotlinPlugin + } + mavenCentral() +} + +sourceSets { + main.java.srcDirs += 'src/main/java2' +} + +dependencies { + compile 'com.google.guava:guava:12.0' + testCompile 'org.testng:testng:6.8' + testRuntime 'org.jetbrains.kotlin:kotlin-stdlib:0.1-SNAPSHOT' +} + +test { + useTestNG() +} + +task show << { + buildscript.configurations.classpath.each { println it } +} + +task wrapper(type: Wrapper) { + gradleVersion="1.6" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/javaPackage/JavaClass.java b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/javaPackage/JavaClass.java new file mode 100644 index 00000000000..e8544b7a65f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/javaPackage/JavaClass.java @@ -0,0 +1,15 @@ +package javaPackage; + +import kotlinPackage.*; +import kotlinPackage2.*; + +public class JavaClass { + public void foo() { + + } + + public static void main(String[] args) { + new KotlinClass().foo(); + new KotlinClass2().foo(); + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/kotlinPackage/KotlinClass.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/kotlinPackage/KotlinClass.kt new file mode 100644 index 00000000000..d3482b7776e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java/kotlinPackage/KotlinClass.kt @@ -0,0 +1,14 @@ +package kotlinPackage + +import javaPackage.* +import javaPackage2.* + +public class KotlinClass() { + fun foo() {} +} + +fun main() { + JavaClass().foo() + JavaClass2().foo() +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/javaPackage2/JavaClass2.java b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/javaPackage2/JavaClass2.java new file mode 100644 index 00000000000..f24a9d43e66 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/javaPackage2/JavaClass2.java @@ -0,0 +1,15 @@ +package javaPackage2; + +import kotlinPackage.*; +import kotlinPackage2.*; + +public class JavaClass2 { + public void foo() { + + } + + public static void main(String[] args) { + new KotlinClass().foo(); + new KotlinClass2().foo(); + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/kotlinPackage2/KotlinClass2.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/kotlinPackage2/KotlinClass2.kt new file mode 100644 index 00000000000..033b63062f3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlinInJavaRoot/src/main/java2/kotlinPackage2/KotlinClass2.kt @@ -0,0 +1,14 @@ +package kotlinPackage2 + +import javaPackage.* +import javaPackage2.* + +public class KotlinClass2() { + fun foo() {} +} + +fun main() { + JavaClass().foo() + JavaClass2().foo() +} +