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: 012ffa2993
This commit is contained in:
committed by
Alexander Udalov
parent
59993b1441
commit
83ec05b31d
+18
@@ -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)
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
c [sourceSetHolder]
|
||||
|
||||
pJvm [compilationAndSourceSetHolder, jvm]
|
||||
pJvm -> c [include]
|
||||
|
||||
pJs [compilationAndSourceSetHolder, js]
|
||||
pJs -> c [include]
|
||||
+24
@@ -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
|
||||
------------------------------------------
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
@OptIn(ExperimentalMultiplatform::class)
|
||||
@OptionalExpectation
|
||||
expect annotation class Optional(val value: String)
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
@Optional("1")
|
||||
class Usage
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
@Optional("2")
|
||||
class Usage
|
||||
Reference in New Issue
Block a user