From 83ec05b31daec31dbf190c1135c22456ffc4557f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 17 Dec 2019 17:43:42 +0100 Subject: [PATCH] Support new scheme of compilation of OptionalExpectation annotations Instead of generating these annotation classes as package-private on JVM, serialize their metadata to the .kotlin_module file, and load it when compiling dependent multiplatform modules. The problem with generating them as package-private was that kotlin-stdlib for JVM would end up declaring symbols from other platforms, which would include some annotations from package kotlin.native. But using that package is discouraged by some tools because it has a Java keyword in its name. In particular, jlink refused to work with such artifact altogether (KT-21266). #KT-38652 Fixed Original commit: 012ffa299343e9d9fe23133dd3c14a4e8c027c30 --- .../build/IncrementalJvmJpsTestGenerated.java | 18 ++++++++++++++ .../custom/complementaryFiles/build.log | 1 - .../_dependencies.txt | 7 ++++++ .../modifyOptionalAnnotationUsage/build.log | 24 +++++++++++++++++++ .../c_declaration.kt | 3 +++ .../modifyOptionalAnnotationUsage/c_usage.kt | 2 ++ .../c_usage.kt.new.1 | 2 ++ 7 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/_dependencies.txt create mode 100644 jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/build.log create mode 100644 jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_declaration.kt create mode 100644 jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt create mode 100644 jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt.new.1 diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java index fa0ed3f2b4d..8f6dc896138 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java @@ -598,6 +598,11 @@ public class IncrementalJvmJpsTestGenerated extends AbstractIncrementalJvmJpsTes runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/"); } + @TestMetadata("modifyOptionalAnnotationUsage") + public void testModifyOptionalAnnotationUsage() throws Exception { + runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/"); + } + @TestMetadata("notSameCompiler") public void testNotSameCompiler() throws Exception { runTest("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler/"); @@ -655,6 +660,19 @@ public class IncrementalJvmJpsTestGenerated extends AbstractIncrementalJvmJpsTes } } + @TestMetadata("jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class ModifyOptionalAnnotationUsage extends AbstractIncrementalJvmJpsTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInModifyOptionalAnnotationUsage() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage"), Pattern.compile("^([^\\.]+)$"), null, true); + } + } + @TestMetadata("jps-plugin/testData/incremental/multiModule/multiplatform/custom/notSameCompiler") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log index d50092a5710..3a90f366b38 100644 --- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log @@ -8,7 +8,6 @@ Cleaning output files: End of files Cleaning output files: out/production/pJvm/FKt.class - out/production/pJvm/SharedImmutable.class End of files Compiling files: c/src/f.kt diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/_dependencies.txt b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/_dependencies.txt new file mode 100644 index 00000000000..94161f8d01d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/_dependencies.txt @@ -0,0 +1,7 @@ +c [sourceSetHolder] + +pJvm [compilationAndSourceSetHolder, jvm] +pJvm -> c [include] + +pJs [compilationAndSourceSetHolder, js] +pJs -> c [include] diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/build.log new file mode 100644 index 00000000000..85eb646b8c3 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/build.log @@ -0,0 +1,24 @@ +================ Step #1 ================= + +Building c +Building pJs +Cleaning output files: + out/production/pJs/pJs.js + out/production/pJs/pJs.meta.js + out/production/pJs/pJs/root-package.kjsm +End of files +Compiling files: + c/src/usage.kt +End of files +Exit code: OK +------------------------------------------ +Building pJvm +Cleaning output files: + out/production/pJvm/META-INF/pJvm.kotlin_module + out/production/pJvm/Usage.class +End of files +Compiling files: + c/src/usage.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_declaration.kt b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_declaration.kt new file mode 100644 index 00000000000..84c59ee8284 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_declaration.kt @@ -0,0 +1,3 @@ +@OptIn(ExperimentalMultiplatform::class) +@OptionalExpectation +expect annotation class Optional(val value: String) diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt new file mode 100644 index 00000000000..a76180ac767 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt @@ -0,0 +1,2 @@ +@Optional("1") +class Usage diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt.new.1 b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt.new.1 new file mode 100644 index 00000000000..834e6ff534d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/modifyOptionalAnnotationUsage/c_usage.kt.new.1 @@ -0,0 +1,2 @@ +@Optional("2") +class Usage