From b74ae00b9f59563a94cf55f150f0540f06115c9c Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Wed, 17 Apr 2013 16:00:38 +0400 Subject: [PATCH] fix for KT-3490 copy Kotlin classes to resulting classes directory --- .../org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt | 7 ++----- .../kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 8 +++++++- .../org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt | 1 + .../src/test/resources/testProject/alfa/build.gradle | 5 +++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 613fcf40424..286d25a58ef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -64,10 +64,7 @@ open class KotlinPlugin: Plugin { javaBasePlugin.configureForSourceSet(sourceSet, kotlinTask) // store kotlin classes in separate directory. They will serve as class-path to java compiler val kotlinOutputDir = File(project.getBuildDir(), "kotlin-classes/${sourceSetName}") - // builtBy allows to correctly run kotlinTask as a transitive dependency on anything, - // that wants to use sourceSet output (e.g., 'jar' task - sourceSet.getOutput()?.dir(mapOf(Pair("builtBy", kotlinTask)), kotlinOutputDir) - kotlinTask.setDestinationDir(kotlinOutputDir); + kotlinTask.kotlinDestinationDir = kotlinOutputDir; kotlinTask.setDescription("Compiles the $sourceSet.kotlin.") kotlinTask.source(kotlinDirSet) @@ -76,7 +73,7 @@ open class KotlinPlugin: Plugin { if (javaTask != null) { javaTask.dependsOn(kotlinTaskName) - val javacClassPath = javaTask.getClasspath() + project.files(kotlinTask.getDestinationDir()); + val javacClassPath = javaTask.getClasspath() + project.files(kotlinTask.kotlinDestinationDir); javaTask.setClasspath(javacClassPath) } } 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 2a5727685b5..3ac44255d81 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 @@ -23,6 +23,7 @@ import org.gradle.api.logging.Logger import org.gradle.api.logging.Logging import org.apache.commons.lang.StringUtils import org.gradle.api.initialization.dsl.ScriptHandler +import org.apache.commons.io.FileUtils public open class KotlinCompile(): AbstractCompile() { @@ -32,6 +33,8 @@ public open class KotlinCompile(): AbstractCompile() { public val kotlinOptions: K2JVMCompilerArguments = K2JVMCompilerArguments(); + public var kotlinDestinationDir : File? = getDestinationDir() + // override setSource to track source directory sets override fun setSource(source: Any?) { srcDirsRoots.clear() @@ -98,7 +101,7 @@ public open class KotlinCompile(): AbstractCompile() { args.setClasspath(effectiveClassPath) } - args.outputDir = if (StringUtils.isEmpty(kotlinOptions.outputDir)) { getDestinationDir()?.getPath() } else { kotlinOptions.outputDir } + args.outputDir = if (StringUtils.isEmpty(kotlinOptions.outputDir)) { kotlinDestinationDir?.getPath() } else { kotlinOptions.outputDir } val embeddedAnnotations = getAnnotations() val userAnnotations = (kotlinOptions.annotations ?: "").split(File.pathSeparatorChar).toList() @@ -116,6 +119,9 @@ public open class KotlinCompile(): AbstractCompile() { ExitCode.INTERNAL_ERROR -> throw GradleException("Internal compiler error. See log for more details") else -> {} } + + // Copy kotlin classes to all classes directory + FileUtils.copyDirectory(kotlinDestinationDir, getDestinationDir()) } fun getAnnotations(): File { 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 a22aab97035..7fc7be8cb97 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 @@ -58,6 +58,7 @@ class BasicKotlinGradleIT { assertTrue(buildOutput.contains(":compileKotlin"), "Should contain ':compileKotlin'") assertTrue(buildOutput.contains(":compileTestKotlin"), "Should contain ':compileTestKotlin'") assertTrue(buildOutput.contains(":compileDeployKotlin"), "Should contain ':compileDeployKotlin'") + assertTrue(File(projectDir, "build/reports/tests/demo.TestSource.html").exists(), "Test report does not exist. Were tests executed?") // Run the build second time, assert everything is up-to-date 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 76b840fbf4e..6b6bbdfcdac 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 @@ -25,6 +25,11 @@ dependencies { compile 'com.google.guava:guava:12.0' deployCompile '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 << {