diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index b800a0bdba7..5b298ff3cb3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -100,6 +100,18 @@ class KotlinGradleIT : BaseGradleIT() { } } + @Test + fun testKotlinCompileInFolderWithSpaces() { + val project = Project(projectName = "Project Path With Spaces") + + project.build("build") { + assertSuccessful() + assertReportExists() + assertTasksExecuted(":compileKotlin", ":compileTestKotlin") + assertNotContains("Forcing System.gc") + } + } + @Test fun testLogLevelForceGC() { val debugProject = Project("simpleProject", minLogLevel = LogLevel.LIFECYCLE) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/build.gradle new file mode 100644 index 00000000000..2739c96398f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/build.gradle @@ -0,0 +1,26 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: "kotlin" + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile 'com.google.guava:guava:12.0' + testCompile 'org.testng:testng:6.8' + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} + +test { + useTestNG() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/gradle.properties new file mode 100644 index 00000000000..c2e97feab87 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -Dkotlin.compiler.execution.strategy="out-of-process" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Dummy.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Dummy.kt new file mode 100644 index 00000000000..9c033c2608b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Dummy.kt @@ -0,0 +1,3 @@ +package demo + +class Dummy diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Greeter.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Greeter.kt new file mode 100644 index 00000000000..accb6e430f8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/Greeter.kt @@ -0,0 +1,3 @@ +package demo + +open class Greeter(val greeting: String) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/KotlinGreetingJoiner.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/KotlinGreetingJoiner.kt new file mode 100644 index 00000000000..e75fca8cbc6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/KotlinGreetingJoiner.kt @@ -0,0 +1,18 @@ +package demo + +import com.google.common.base.Joiner +import java.util.ArrayList + +class KotlinGreetingJoiner(val greeter: Greeter) { + val names = ArrayList() + + fun addName(name: String?): Unit { + names.add(name) + } + + fun getJoinedGreeting(): String? { + val joiner = Joiner.on(" and ").skipNulls(); + return "${greeter.greeting} ${joiner.join(names)}" + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/dummyUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/dummyUtil.kt new file mode 100644 index 00000000000..2bf9f3e293a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/main/kotlin/dummyUtil.kt @@ -0,0 +1,3 @@ +package demo + +fun dummyFun() {} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestGreeter.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestGreeter.kt new file mode 100644 index 00000000000..978621e4ef5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestGreeter.kt @@ -0,0 +1,10 @@ +package demo + +import org.testng.Assert.assertEquals + +class TestGreeter { + fun test() { + val greeter = Greeter("Hi!") + assertEquals("Hi!", greeter.greeting) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestKotlinGreetingJoiner.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestKotlinGreetingJoiner.kt new file mode 100644 index 00000000000..2fec341a8e4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/Project Path With Spaces/src/test/kotlin/TestKotlinGreetingJoiner.kt @@ -0,0 +1,17 @@ +package demo + +import org.testng.Assert.assertEquals +import org.testng.annotations.Test as test + +class TestKotlinGreetingJoiner() { + @test + fun test() { + val example : KotlinGreetingJoiner = KotlinGreetingJoiner(Greeter("Hi")) + example.addName("Harry") + example.addName("Ron") + example.addName("Hermione") + + assertEquals(example.getJoinedGreeting(), "Hi Harry and Ron and Hermione") + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt index c4cc16d6dc4..943a557fed7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.compilerRunner +import groovy.json.StringEscapeUtils import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity @@ -124,9 +125,10 @@ internal fun runToolInSeparateProcess( } private fun writeArgumentsToFile(directory: File, argsArray: Array): File { - val compilerOptions = File.createTempFile(LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE) + "_", ".compiler.options", directory) + val compilerOptions = + File.createTempFile(LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE) + "_", ".compiler.options", directory) compilerOptions.deleteOnExit() - compilerOptions.writeText(argsArray.joinToString(" ")) + compilerOptions.writeText(argsArray.joinToString(" ") { "\"${StringEscapeUtils.escapeJava(it)}\"" }) return compilerOptions }