From bdf229bc5ccc03ae851567c976f2132753ce500e Mon Sep 17 00:00:00 2001 From: "Aleksei.Cherepanov" Date: Mon, 18 Apr 2022 11:20:40 +0000 Subject: [PATCH] [JPS] Ignore classpath from facets to exclude jars from gradle build Reimport after `./gradlew build` adds jars from gradle's `build/libs` to facet's classpath. That causes problems with JPS build, because it doesn't see changes in out folder, but see unchanged jar, so changes don't apply. #KT-51873 Fixed Merge-request: KT-MR-6018 Merged-by: Aleksei Cherepanov --- .../kotlin/config/KotlinFacetSettings.kt | 1 + .../kotlin/jps/build/KotlinJpsBuildTest.kt | 27 ++++++++++++++++ .../BuildAfterGdwBuild/kotlinProject.ipr | 32 +++++++++++++++++++ .../BuildAfterGdwBuild/module1/module1.iml | 12 +++++++ .../BuildAfterGdwBuild/module1/src/Base.kt | 4 +++ .../BuildAfterGdwBuild/module1AsLib/Base.kt | 3 ++ .../BuildAfterGdwBuild/module2/module2.iml | 13 ++++++++ .../BuildAfterGdwBuild/module2/src/Derived.kt | 9 ++++++ 8 files changed, 101 insertions(+) create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/module1.iml create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/src/Base.kt create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1AsLib/Base.kt create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/module2.iml create mode 100644 jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/src/Derived.kt diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 0303d2077b4..5049eedc230 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -175,6 +175,7 @@ class KotlinFacetSettings { if (compilerSettings != null) { parseCommandLineArguments(compilerSettings.additionalArgumentsAsList, this) } + if (this is K2JVMCompilerArguments) this.classpath = "" } } else null } diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 580bb0db902..16e8c6ad9c5 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -71,6 +71,8 @@ import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException import java.net.URLClassLoader +import java.nio.file.Files +import java.nio.file.StandardCopyOption import java.util.* import java.util.zip.ZipOutputStream @@ -986,6 +988,31 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { checkWhen(emptyArray(), null, packageClasses("kotlinProject", "src/test1.kt", "Test1Kt")) } + fun testBuildAfterGdwBuild() { + initProject(JVM_FULL_RUNTIME) + findModule("module2").let { + val facet = KotlinFacetSettings() + facet.useProjectSettings = false + facet.compilerArguments = K2JVMCompilerArguments() + + val libraryName = "module1-1.0-SNAPSHOT" + val libraryJar = MockLibraryUtilExt.compileJvmLibraryToJar(workDir.resolve("module1AsLib").absolutePath, libraryName) + val module1Lib = this.workDir.resolve("module1").resolve("build").resolve("libs").resolve("$libraryName.jar") + Files.createDirectories(module1Lib.parentFile.toPath()) + Files.copy(libraryJar.toPath(), module1Lib.toPath(), StandardCopyOption.REPLACE_EXISTING) + + assert(module1Lib.exists()) + (facet.compilerArguments as K2JVMCompilerArguments).classpath = module1Lib.path + + it.container.setChild( + JpsKotlinFacetModuleExtension.KIND, + JpsKotlinFacetModuleExtension(facet) + ) + } + + buildAllModules().assertSuccessful() + } + private fun BuildResult.checkErrors() { val actualErrors = getMessages(BuildMessage.Kind.ERROR) .map { it as CompilerMessage } diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/kotlinProject.ipr b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/kotlinProject.ipr new file mode 100644 index 00000000000..c1a403dd047 --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/kotlinProject.ipr @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/module1.iml b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/module1.iml new file mode 100644 index 00000000000..eff2a2bb0bf --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/module1.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/src/Base.kt b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/src/Base.kt new file mode 100644 index 00000000000..0e668cef32c --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1/src/Base.kt @@ -0,0 +1,4 @@ +abstract class Base { + abstract fun doSmth() + abstract fun doSmthElse() +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1AsLib/Base.kt b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1AsLib/Base.kt new file mode 100644 index 00000000000..7a2b10a239d --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module1AsLib/Base.kt @@ -0,0 +1,3 @@ +abstract class Base { + abstract fun doSmth() +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/module2.iml b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/module2.iml new file mode 100644 index 00000000000..bdec3f1d34a --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/module2.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/src/Derived.kt b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/src/Derived.kt new file mode 100644 index 00000000000..926ab81f287 --- /dev/null +++ b/jps/jps-plugin/testData/general/BuildAfterGdwBuild/module2/src/Derived.kt @@ -0,0 +1,9 @@ +class Derived: Base() { + override fun doSmth() { + println("doSmth") + } + + override fun doSmthElse() { + println("doSmthElse") + } +} \ No newline at end of file