diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CleanUpBuildListener.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CleanUpBuildListener.kt index b027e96437d..6cff7d056a0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CleanUpBuildListener.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/CleanUpBuildListener.kt @@ -21,8 +21,10 @@ import org.gradle.BuildAdapter import org.gradle.BuildResult import org.gradle.api.Project import org.gradle.api.logging.Logging +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.com.intellij.openapi.util.io.ZipFileCache import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler +import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem private fun comparableVersionStr(version: String) = @@ -108,6 +110,8 @@ class CompilerServicesCleanup() { cleanJarCache() } + (KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache() + // making cleanup of static objects only on recognized versions of gradle and if version < 2.4 // otherwise it may cause problems e.g. with JobScheduler on subsequent runs // this strategy may lead to memory leaks, but prevent crashes due to destroyed JobScheduler 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 5a8cdc046a0..3d1dbab2fd7 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 @@ -246,4 +246,20 @@ class KotlinGradleIT: BaseGradleIT() { assertContains(":compileKotlin UP-TO-DATE") } } + + @Test + fun testMoveClassToOtherModule() { + val project = Project("moveClassToOtherModule", GRADLE_VERSION) + + project.build("build") { + assertSuccessful() + assertContains("Connected to daemon") + } + + project.performModifications() + project.build("build") { + assertSuccessful() + assertContains("Connected to daemon") + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/build.gradle new file mode 100644 index 00000000000..ed6cb6a85e3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/build.gradle @@ -0,0 +1,5 @@ +apply plugin: 'kotlin' + +dependencies { + compile project(':lib') +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/A.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/A.kt new file mode 100644 index 00000000000..950239b27a2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/A.kt @@ -0,0 +1,5 @@ +package foo + +class A { + fun f() {} +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/A.kt.delete b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/A.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt new file mode 100644 index 00000000000..ed3a67db2ea --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt @@ -0,0 +1,5 @@ +package foo + +fun useA(a: A) { + a.f() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt.new b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt.new new file mode 100644 index 00000000000..e98022a7466 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/app/src/main/java/foo/useA.kt.new @@ -0,0 +1,7 @@ +package foo + +import bar.A + +fun useA(a: A) { + a.f() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/build.gradle new file mode 100644 index 00000000000..8fc6d08f031 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/build.gradle @@ -0,0 +1,9 @@ +buildscript { + ext.kotlin_version = '1.1-SNAPSHOT' + repositories { + maven { url 'file://' + pathToKotlinPlugin } + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/build.gradle new file mode 100644 index 00000000000..90470485bb0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/build.gradle @@ -0,0 +1 @@ +apply plugin: 'kotlin' diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/A.kt.new b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/A.kt.new new file mode 100644 index 00000000000..b994d8404b8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/A.kt.new @@ -0,0 +1,5 @@ +package bar + +class A { + fun f() {} +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/Dummy.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/Dummy.kt new file mode 100644 index 00000000000..4e75c0a0d8f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/lib/src/main/java/bar/Dummy.kt @@ -0,0 +1,3 @@ +package foo + +class Dummy \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/settings.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/settings.gradle new file mode 100644 index 00000000000..3cbe2493511 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/moveClassToOtherModule/settings.gradle @@ -0,0 +1 @@ +include ':app', ':lib'