From 7c329b59b670d2cccd9ab0fae3c94561b1855fcb Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 1 Feb 2018 02:36:10 +0300 Subject: [PATCH] Shade test jars from compiler used in Gradle tests This fixes `VerifyError` for all integration tests calling `KotlinTestUtils.findAndroidSdk()`. The exception was thrown because `:kotlin-gradle-plugin-integration-tests` was depending on both relocated intellij-core (from kotlin-compiler-embeddable) and non-relocated intellij-core (transitevely through tests jars from compiler). A call to `findAndroidSdk()` was triggering classloading for `KotlinTestUtils` which had bytecode references to `org.jetbrains.kotlin.idea.KotlinLanguage` loaded from the embeddable compiler and to `com.intellij.lang.Language` loaded from non-relocated intellij-core. `KotlinLanguage` from the embeddable compiler was a subclass of relocated `org.jetbrains.kotlin.com.intellij.lang.Language` thus it was not assignable to `com.intellij.lang.Language` causing `VerifyError`. The solution is to create relocated jar combining the necessary test jars from the compiler. --- .../build.gradle | 4 +-- .../jetbrains/kotlin/gradle/BaseGradleIT.kt | 2 +- .../kotlin/gradle/KotlinGradlePluginIT.kt | 2 +- .../build.gradle.kts | 33 +++++++++++++++++++ settings.gradle | 2 ++ 5 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-test-utils-embeddable/build.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle index 3cd5628003e..4fa694e1290 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle @@ -15,12 +15,12 @@ dependencies { testCompile project(':kotlin-test:kotlin-test-jvm') testCompile project(path: ':kotlin-compiler-embeddable', configuration: 'runtimeJar') + testCompile (project(path: ':kotlin-gradle-plugin-test-utils-embeddable', configuration: 'runtimeJar')) + testCompile project(path: ':examples:annotation-processor-example') testCompile project(':kotlin-stdlib-jre8') testCompile project(':kotlin-reflect') testCompile project(':kotlin-android-extensions') - testCompile project(path: ':kotlin-build-common', configuration: 'tests-jar') - testCompile project(path: ':compiler:incremental-compilation-impl', configuration: 'tests-jar') testCompile gradleApi() 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 7ef36abb488..f168821bd74 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,6 @@ package org.jetbrains.kotlin.gradle -import com.intellij.openapi.util.io.FileUtil +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 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 f4327f455c8..8c32e10dd08 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,7 +17,7 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.LogLevel -import com.intellij.openapi.util.io.FileUtil +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.* diff --git a/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable/build.gradle.kts new file mode 100644 index 00000000000..f25f8fe729a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable/build.gradle.kts @@ -0,0 +1,33 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + + +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.gradle.jvm.tasks.Jar + +description = "Shaded test jars from compiler for Gradle integration tests" + +plugins { `java` } + +val packedJars by configurations.creating + +val projectsToInclude = listOf(":compiler:tests-common", + ":compiler:incremental-compilation-impl", + ":kotlin-build-common") + +dependencies { + for (projectName in projectsToInclude) { + packedJars(projectTests(projectName)) { isTransitive = false } + } + + packedJars(intellijDep()) { includeJars("idea_rt") } + +} + +runtimeJar(rewriteDepsToShadedCompiler( + task("shadowJar") { + from(packedJars) + } +)) diff --git a/settings.gradle b/settings.gradle index 43de8642eda..07d56cf4221 100644 --- a/settings.gradle +++ b/settings.gradle @@ -129,6 +129,7 @@ include ":kotlin-build-common", ":tools:kotlin-stdlib-gen", ":kotlin-gradle-plugin-api", ":kotlin-gradle-plugin", + ":kotlin-gradle-plugin-test-utils-embeddable", ":kotlin-gradle-plugin-integration-tests", ":kotlin-allopen", ":kotlin-noarg", @@ -209,6 +210,7 @@ project(':tools:kotlin-stdlib-js-merger').projectDir = "$rootDir/libraries/tools project(':tools:kotlin-stdlib-gen').projectDir = "$rootDir/libraries/tools/kotlin-stdlib-gen" as File project(':kotlin-gradle-plugin-api').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-api" as File project(':kotlin-gradle-plugin').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin" as File +project(':kotlin-gradle-plugin-test-utils-embeddable').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-test-utils-embeddable" as File project(':kotlin-gradle-plugin-integration-tests').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-integration-tests" as File project(':kotlin-allopen').projectDir = "$rootDir/libraries/tools/kotlin-allopen" as File project(':kotlin-noarg').projectDir = "$rootDir/libraries/tools/kotlin-noarg" as File