Gradle: collect kotlin files from java source root

This commit is contained in:
Natalia Ukhorskaya
2015-01-22 16:31:44 +03:00
parent 71ec5591f1
commit 11f7b45ce3
8 changed files with 137 additions and 15 deletions
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.cli.common.CLICompiler
import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.highlighter.JavaFileType
import org.jetbrains.kotlin.idea.JetFileType import org.jetbrains.kotlin.idea.JetFileType
import org.jetbrains.kotlin.utils.LibraryUtils import org.jetbrains.kotlin.utils.LibraryUtils
import com.intellij.openapi.util.io.FileUtil
val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations" val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations"
@@ -160,7 +161,7 @@ public open class KotlinCompile() : AbstractKotlinCompile<K2JVMCompilerArguments
fun findSrcDirRoot(file: File): File? { fun findSrcDirRoot(file: File): File? {
for (source in srcDirsSources) { for (source in srcDirsSources) {
for (root in source.getSrcDirs()) { for (root in source.getSrcDirs()) {
if (FileUtils.directoryContains(root, file)) { if (FileUtil.isAncestor(root, file, false)) {
return root return root
} }
} }
@@ -134,6 +134,14 @@ class Kotlin2JvmSourceSetProcessor(
val javacClassPath = javaTask.getClasspath() + project.files(kotlinDestinationDir); val javacClassPath = javaTask.getClasspath() + project.files(kotlinDestinationDir);
javaTask.setClasspath(javacClassPath) javaTask.setClasspath(javacClassPath)
} }
project afterEvaluate { project ->
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<Any?>() val javaSourceList = ArrayList<Any?>()
fun processSourceSet(javaSourceSet: AndroidSourceSet) {
val javaSrcDirs = AndroidGradleWrapper.getJavaSrcDirs(javaSourceSet)
javaSourceList.addAll(javaSrcDirs)
val testKotlinSource = getExtension<KotlinSourceSet>(javaSourceSet, "kotlin")
val kotlinSDS = testKotlinSource.getKotlin()
for (dir in javaSrcDirs) {
kotlinSDS.srcDir(dir)
}
kotlinTask.source(kotlinSDS)
}
if (variant is TestVariant) { if (variant is TestVariant) {
javaSourceList.addAll(AndroidGradleWrapper.getJavaSrcDirs(testSourceSet)) processSourceSet(testSourceSet)
val testKotlinSource = getExtension<KotlinSourceSet>(testSourceSet, "kotlin")
kotlinTask.source(testKotlinSource.getKotlin())
} else { } else {
javaSourceList.addAll(AndroidGradleWrapper.getJavaSrcDirs(mainSourceSet)) processSourceSet(mainSourceSet)
val mainKotlinSource = getExtension<KotlinSourceSet>(mainSourceSet, "kotlin")
kotlinTask.source(mainKotlinSource.getKotlin())
} }
if (null != buildTypeSourceSet) { if (null != buildTypeSourceSet) {
javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(buildTypeSourceSet)) processSourceSet(buildTypeSourceSet)
kotlinTask.source(getExtension<KotlinSourceSet>(buildTypeSourceSet, "kotlin").getKotlin())
} }
for (resourceFolder in AndroidGradleWrapper.getRClassFolder(variant)) { 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 defaultFlavourSourceSetName = flavourName + buildTypeSourceSetName.capitalize()
val defaultFlavourSourceSet = sourceSets.findByName(defaultFlavourSourceSetName) val defaultFlavourSourceSet = sourceSets.findByName(defaultFlavourSourceSetName)
if (defaultFlavourSourceSet != null) { if (defaultFlavourSourceSet != null) {
javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(defaultFlavourSourceSet)) processSourceSet(defaultFlavourSourceSet)
kotlinTask.source(getExtension<KotlinSourceSet>(defaultFlavourSourceSet, "kotlin").getKotlin())
} }
val flavourSourceSet = sourceSets.findByName(flavourName) val flavourSourceSet = sourceSets.findByName(flavourName)
if (flavourSourceSet != null) { if (flavourSourceSet != null) {
javaSourceList.add(AndroidGradleWrapper.getJavaSrcDirs(flavourSourceSet)) processSourceSet(flavourSourceSet)
kotlinTask.source(getExtension<KotlinSourceSet>(flavourSourceSet, "kotlin").getKotlin())
} }
} }
} }
@@ -50,4 +50,12 @@ class KotlinGradleIT: BaseGradleIT() {
assertContains(":subproject:compileKotlin", ":subproject:compileTestKotlin") assertContains(":subproject:compileKotlin", ":subproject:compileTestKotlin")
} }
} }
Test fun testKotlinInJavaRoot() {
Project("kotlinInJavaRoot", "1.6").build("build") {
assertSuccessful()
assertReportExists()
assertContains(":compileKotlin", ":compileTestKotlin")
}
}
} }
@@ -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"
}
@@ -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();
}
}
@@ -0,0 +1,14 @@
package kotlinPackage
import javaPackage.*
import javaPackage2.*
public class KotlinClass() {
fun foo() {}
}
fun main() {
JavaClass().foo()
JavaClass2().foo()
}
@@ -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();
}
}
@@ -0,0 +1,14 @@
package kotlinPackage2
import javaPackage.*
import javaPackage2.*
public class KotlinClass2() {
fun foo() {}
}
fun main() {
JavaClass().foo()
JavaClass2().foo()
}