From 6c4f3df851a49663ce46c510a659fabe95c66bfd Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 1 Feb 2018 03:33:57 +0300 Subject: [PATCH] Remove intellij-core usages from kotlin-gradle-plugin-integration-tests We can use only relocated intellij-core from kotlin-compiler-embeddable. Non-source usages do not resolve in IDE (which also breaks debugger). --- .../jetbrains/kotlin/gradle/BaseGradleIT.kt | 9 ++- .../kotlin/gradle/KotlinGradlePluginIT.kt | 4 +- .../jetbrains/kotlin/gradle/util/fileUtil.kt | 65 +++++++++++++++++++ .../kotlin/gradle/util/gradleRunningUtils.kt | 4 +- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index f168821bd74..8716027b5f1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlin.gradle -import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil import org.gradle.api.logging.LogLevel import org.jetbrains.kotlin.gradle.util.* import org.junit.After @@ -21,7 +20,7 @@ abstract class BaseGradleIT { @Before fun setUp() { - workingDir = FileUtil.createTempDirectory("BaseGradleIT", null) + workingDir = createTempDir("BaseGradleIT") acceptAndroidSdkLicenses() } @@ -105,7 +104,7 @@ abstract class BaseGradleIT { } private fun createNewWrapperDir(version: String): File = - FileUtil.createTempDirectory("GradleWrapper-", version, /* deleteOnExit */ true) + createTempDir("GradleWrapper-$version") .apply { File(BaseGradleIT.resourcesRootFile, "GradleWrapper").copyRecursively(this) val wrapperProperties = File(this, "gradle/wrapper/gradle-wrapper.properties") @@ -345,8 +344,8 @@ abstract class BaseGradleIT { } fun CompiledProject.assertContainFiles(expected: Iterable, actual: Iterable, messagePrefix: String = ""): CompiledProject { - val expectedNormalized = expected.map(FileUtil::normalize).toSortedSet() - val actualNormalized = actual.map(FileUtil::normalize).toSortedSet() + val expectedNormalized = expected.map(::normalizePath).toSortedSet() + val actualNormalized = actual.map(::normalizePath).toSortedSet() assertTrue(actualNormalized.containsAll(expectedNormalized), messagePrefix + "expected files: ${expectedNormalized.joinToString()}\n !in actual files: ${actualNormalized.joinToString()}") return this } 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 8c32e10dd08..4de190459fc 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 @@ -17,10 +17,8 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.LogLevel -import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.gradle.plugin.CopyClassesToJavaOutputStatus import org.jetbrains.kotlin.gradle.tasks.USING_INCREMENTAL_COMPILATION_MESSAGE -import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.util.* import org.junit.Test import java.io.File @@ -63,7 +61,7 @@ class KotlinGradleIT: BaseGradleIT() { assertSuccessful() } - val wd2 = FileUtil.createTempDirectory("testRunningInDifferentDir", null) + val wd2 = createTempDir("testRunningInDifferentDir") wd1.copyRecursively(wd2) wd1.deleteRecursively() assert(!wd1.exists()) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt index 86ffe4ffc6d..27a911d5853 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin.gradle.util import java.io.File +import java.nio.file.Files fun File.getFileByName(name: String): File = findFileByName(name) ?: throw AssertionError("Could not find file with name '$name' in $this") @@ -24,3 +25,67 @@ fun File.modify(transform: (String)->String) { writeText(transform(readText())) } +fun createTempDir(prefix: String): File = + Files.createTempDirectory(prefix).toFile().apply { + deleteOnExit() + } + +/** + * converts back slashes to forward slashes + * removes double slashes inside the path, e.g. "x/y//z" => "x/y/z" + * + * Converted from com.intellij.openapi.util.io.FileUtil.normalize + */ +fun normalizePath(path: String): String { + var start = 0 + var separator = false + if (isWindows) { + if (path.startsWith("//")) { + start = 2 + separator = true + } else if (path.startsWith("\\\\")) { + return normalizeTail(0, path, false) + } + } + + for (i in start until path.length) { + val c = path[i] + if (c == '/') { + if (separator) { + return normalizeTail(i, path, true) + } + separator = true + } else if (c == '\\') { + return normalizeTail(i, path, separator) + } else { + separator = false + } + } + + return path +} + +private fun normalizeTail(prefixEnd: Int, path: String, separator: Boolean): String { + var separator = separator + val result = StringBuilder(path.length) + result.append(path, 0, prefixEnd) + var start = prefixEnd + if (start == 0 && isWindows && (path.startsWith("//") || path.startsWith("\\\\"))) { + start = 2 + result.append("//") + separator = true + } + + for (i in start until path.length) { + val c = path[i] + if (c == '/' || c == '\\') { + if (!separator) result.append('/') + separator = true + } else { + result.append(c) + separator = false + } + } + + return result.toString() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt index ad4660531ad..06ac8e57ba6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt @@ -47,10 +47,10 @@ fun runProcess( } fun createGradleCommand(wrapperDir: File, tailParameters: List): List { - return if (isWindows()) + return if (isWindows) listOf("cmd", "/C", "${wrapperDir.absolutePath}/gradlew.bat") + tailParameters else listOf("/bin/bash", "${wrapperDir.absolutePath}/gradlew") + tailParameters } -private fun isWindows(): Boolean = System.getProperty("os.name")!!.contains("Windows") \ No newline at end of file +val isWindows: Boolean = System.getProperty("os.name")!!.contains("Windows") \ No newline at end of file