From 38ffd6f85e43da4418f379735793834926b76c04 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 11 May 2018 19:28:58 +0300 Subject: [PATCH] Add test for missing lz4 dependency Adds Gradle test for the exception: `java.lang.ClassNotFoundException: net.jpountz.lz4.LZ4Factory` The exception breaks IC in Gradle. Gradle compiles non-incrementally as a fallback strategy, so the build succeeds, but IC is not working. IC uses persistent hash tables from Intellij as caches. These tables's buffers are compressed when full. Previously snappy was used for compression, but 181 platform switched to LZ4, which was cut out by proguard. The problem could only be reproduced with Gradle, since in JPS plugin all caches are managed by JPS process, which contains the necessary library. To reproduce the compiler needs to be processed by proguard (which always happens on TeamCity). Many classes are needed to trigger the compression. --- .../kotlin/gradle/KotlinGradlePluginIT.kt | 22 +++++++++++++++++++ .../testProject/manyClasses/build.gradle | 20 +++++++++++++++++ .../testProject/manyClasses/gradle.properties | 1 + .../manyClasses/src/main/kotlin/classes.kt | 7 ++++++ .../manyClasses/src/main/kotlin/dummy.kt | 10 +++++++++ 5 files changed, 60 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/classes.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/dummy.kt 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 53fc2efd95f..fdadf7dc1f6 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 @@ -208,6 +208,28 @@ class KotlinGradleIT : BaseGradleIT() { } } + @Test + fun testManyClassesIC() { + val project = Project("manyClasses") + val options = defaultBuildOptions().copy(incremental = true) + + project.setupWorkingDir() + val classesKt = project.projectFile("classes.kt") + classesKt.writeText((0..1024).joinToString("\n") { "class Class$it { fun f() = $it }" }) + + project.build("build", options = options) { + assertSuccessful() + assertNoWarnings() + } + + val dummyKt = project.projectFile("dummy.kt") + dummyKt.modify { "$it " } + project.build("build", options = options) { + assertSuccessful() + assertCompiledKotlinSources(project.relativize(dummyKt)) + } + } + @Test fun testSimpleMultiprojectIncremental() { val incremental = defaultBuildOptions().copy(incremental = true) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/build.gradle new file mode 100644 index 00000000000..45130da1cf1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/build.gradle @@ -0,0 +1,20 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: "kotlin" + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-runtime:$kotlin_version" +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/gradle.properties new file mode 100644 index 00000000000..93ce6a94e63 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/classes.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/classes.kt new file mode 100644 index 00000000000..d8ee4579e97 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/classes.kt @@ -0,0 +1,7 @@ +/* + * Copyright 2010-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. + */ + +// Actual classes are generated in KotlinGradleIT.testManyClasses + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/dummy.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/dummy.kt new file mode 100644 index 00000000000..5e12b20a9fd --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/manyClasses/src/main/kotlin/dummy.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-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. + */ + +package foo + +fun dummy() { +} +