diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index 85321b3dcb5..b1ef453c1f6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -961,7 +961,7 @@ public class KotlinTypeMapper { if (!(descriptor instanceof ConstructorDescriptor) && descriptor.getVisibility() == Visibilities.INTERNAL && - !descriptor.getAnnotations().hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi)) { + !DescriptorUtilsKt.isPublishedApi(descriptor)) { return name + "$" + NameUtils.sanitizeAsJavaIdentifier(moduleName); } diff --git a/compiler/testData/codegen/box/publishedApi/noMangling.kt b/compiler/testData/codegen/box/publishedApi/noMangling.kt index 6247ebb880b..8ecfb8a8c04 100644 --- a/compiler/testData/codegen/box/publishedApi/noMangling.kt +++ b/compiler/testData/codegen/box/publishedApi/noMangling.kt @@ -2,14 +2,18 @@ //WITH_REFLECT class A { @PublishedApi - internal fun published() = "OK" + internal fun published() = "O" - inline fun test() = published() + @PublishedApi + internal var publishedProp = "K" + inline fun test() = published() + publishedProp } fun box() : String { val clazz = A::class.java - if (clazz.getDeclaredMethod("published") == null) return "fail" - return "OK" + if (clazz.getDeclaredMethod("published") == null) return "fail 1" + if (clazz.getDeclaredMethod("getPublishedProp") == null) return "fail 2" + if (clazz.getDeclaredMethod("setPublishedProp", String::class.java) == null) return "fail 3" + return A().test() } diff --git a/compiler/testData/codegen/light-analysis/publishedApi/noMangling.txt b/compiler/testData/codegen/light-analysis/publishedApi/noMangling.txt index cb19de56647..3e664fd65a1 100644 --- a/compiler/testData/codegen/light-analysis/publishedApi/noMangling.txt +++ b/compiler/testData/codegen/light-analysis/publishedApi/noMangling.txt @@ -1,7 +1,11 @@ @kotlin.Metadata public final class A { + private @org.jetbrains.annotations.NotNull field publishedProp: java.lang.String public method (): void + public final @org.jetbrains.annotations.NotNull method getPublishedProp(): java.lang.String public final @kotlin.PublishedApi @org.jetbrains.annotations.NotNull method published(): java.lang.String + public synthetic deprecated static @kotlin.PublishedApi method publishedProp$annotations(): void + public final method setPublishedProp(@org.jetbrains.annotations.NotNull p0: java.lang.String): void public final @org.jetbrains.annotations.NotNull method test(): java.lang.String } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibility.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibility.kt index 3b2ebbec734..3cf9d7d4e57 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibility.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibility.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.descriptors.EffectiveVisibility.* import org.jetbrains.kotlin.descriptors.RelationToType.* +import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = false, val privateApi: Boolean = false) { @@ -245,11 +246,6 @@ private fun Visibility.forVisibility(descriptor: DeclarationDescriptor, checkPub else -> throw AssertionError("Visibility $name is not allowed in forVisibility") } -private fun DeclarationDescriptor.isPublishedApi(): Boolean { - val descriptor = if (this is CallableMemberDescriptor) DescriptorUtils.getDirectMember(this) else this - return descriptor.annotations.hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi) -} - fun effectiveVisibility(visibility: Visibility, descriptor: DeclarationDescriptor, checkPublishedApi: Boolean = false) = visibility.forVisibility(descriptor, checkPublishedApi) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index f8d000b3322..2d344b98039 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -397,3 +397,8 @@ fun ClassDescriptor.getNoArgsConstructor(): ClassConstructorDescriptor? = fun ClassDescriptor.getConstructorForEmptyArgumentsList(): List = constructors.filter { it.valueParameters.all { it.hasDefaultValue() || it.varargElementType != null } } + +fun DeclarationDescriptor.isPublishedApi(): Boolean { + val descriptor = if (this is CallableMemberDescriptor) DescriptorUtils.getDirectMember(this) else this + return descriptor.annotations.hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi) +}