Do not mangle internal @PublishedApi functions

This commit is contained in:
Mikhael Bogdanov
2016-12-07 17:03:06 +01:00
parent 5ffc0b36b0
commit 18cb734c58
9 changed files with 140 additions and 1 deletions
@@ -921,7 +921,9 @@ public class KotlinTypeMapper {
return name;
}
if (!(descriptor instanceof ConstructorDescriptor) && descriptor.getVisibility() == Visibilities.INTERNAL) {
if (!(descriptor instanceof ConstructorDescriptor) &&
descriptor.getVisibility() == Visibilities.INTERNAL &&
!descriptor.getAnnotations().hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi)) {
return name + "$" + JvmAbi.sanitizeAsJavaIdentifier(moduleName);
}
@@ -0,0 +1,15 @@
// IGNORE_BACKEND: JS
//WITH_REFLECT
class A {
@PublishedApi
internal fun published() = "OK"
inline fun test() = published()
}
fun box() : String {
val clazz = A::class.java
if (clazz.getDeclaredMethod("published") == null) return "fail"
return "OK"
}
+12
View File
@@ -0,0 +1,12 @@
class A {
@PublishedApi
internal fun published() = "OK"
inline fun test() = published()
}
fun box() : String {
return A().test()
}
@@ -0,0 +1,10 @@
public final class A {
public method <init>(): void
public final @kotlin.PublishedApi @org.jetbrains.annotations.NotNull method published(): java.lang.String
public final @org.jetbrains.annotations.NotNull method test(): java.lang.String
}
public final class NoManglingKt {
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -0,0 +1,10 @@
public final class A {
public method <init>(): void
public final @kotlin.PublishedApi @org.jetbrains.annotations.NotNull method published(): java.lang.String
public final @org.jetbrains.annotations.NotNull method test(): java.lang.String
}
public final class SimpleKt {
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -11655,6 +11655,27 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
}
}
@TestMetadata("compiler/testData/codegen/box/publishedApi")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class PublishedApi extends AbstractIrBlackBoxCodegenTest {
public void testAllFilesPresentInPublishedApi() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/publishedApi"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("noMangling.kt")
public void testNoMangling() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/noMangling.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/simple.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/ranges")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -11655,6 +11655,27 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
}
}
@TestMetadata("compiler/testData/codegen/box/publishedApi")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class PublishedApi extends AbstractBlackBoxCodegenTest {
public void testAllFilesPresentInPublishedApi() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/publishedApi"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("noMangling.kt")
public void testNoMangling() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/noMangling.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/simple.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/ranges")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -11655,6 +11655,27 @@ public class LightAnalysisModeCodegenTestGenerated extends AbstractLightAnalysis
}
}
@TestMetadata("compiler/testData/codegen/box/publishedApi")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class PublishedApi extends AbstractLightAnalysisModeCodegenTest {
public void testAllFilesPresentInPublishedApi() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/publishedApi"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("noMangling.kt")
public void testNoMangling() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/noMangling.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/simple.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/ranges")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -14182,6 +14182,33 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
}
}
@TestMetadata("compiler/testData/codegen/box/publishedApi")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class PublishedApi extends AbstractJsCodegenBoxTest {
public void testAllFilesPresentInPublishedApi() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/publishedApi"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
}
@TestMetadata("noMangling.kt")
public void testNoMangling() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/noMangling.kt");
try {
doTest(fileName);
}
catch (Throwable ignore) {
return;
}
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/publishedApi/simple.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/ranges")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)