Fix @PublishedApi checking
This commit is contained in:
+137
-4
@@ -1,9 +1,40 @@
|
|||||||
// !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE
|
// !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE
|
||||||
inline fun call(a: A) {
|
inline fun call(a: A) {
|
||||||
a.test()
|
a.test()
|
||||||
testTopLevel()
|
publishedTopLevel()
|
||||||
|
|
||||||
|
a.publishedVar
|
||||||
|
a.publishedVar = 1
|
||||||
|
|
||||||
|
publishedVarTopLevel
|
||||||
|
publishedVarTopLevel = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline var inlineVar: Int
|
||||||
|
get() {
|
||||||
|
val a = A()
|
||||||
|
a.test()
|
||||||
|
publishedTopLevel()
|
||||||
|
|
||||||
|
a.publishedVar
|
||||||
|
a.publishedVar = 1
|
||||||
|
|
||||||
|
publishedVarTopLevel
|
||||||
|
publishedVarTopLevel = 1
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
set(value) {
|
||||||
|
val a = A()
|
||||||
|
a.test()
|
||||||
|
publishedTopLevel()
|
||||||
|
|
||||||
|
a.publishedVar
|
||||||
|
a.publishedVar = 1
|
||||||
|
|
||||||
|
publishedVarTopLevel
|
||||||
|
publishedVarTopLevel = 1
|
||||||
|
}
|
||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal class A {
|
internal class A {
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
@@ -11,6 +42,16 @@ internal class A {
|
|||||||
publicFun()
|
publicFun()
|
||||||
internalFun()
|
internalFun()
|
||||||
privateFun()
|
privateFun()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
internalVarTopLevel
|
||||||
|
internalVarTopLevel = 1
|
||||||
|
privateVarTopLevel
|
||||||
|
privateVarTopLevel = 1
|
||||||
|
|
||||||
|
publishedVar
|
||||||
|
publishedVar = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
@@ -18,25 +59,117 @@ internal class A {
|
|||||||
publicFun()
|
publicFun()
|
||||||
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
|
|
||||||
|
publishedVar
|
||||||
|
publishedVar = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PublishedApi
|
||||||
|
internal inline var publishedVar: Int
|
||||||
|
get() {
|
||||||
|
publicFun()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
set(value) {
|
||||||
|
publicFun()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal fun testTopLevel() {
|
internal fun publishedTopLevel() {
|
||||||
publicFun()
|
publicFun()
|
||||||
internalFun()
|
internalFun()
|
||||||
|
privateFun()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
internalVarTopLevel
|
||||||
|
internalVarTopLevel = 1
|
||||||
|
privateVarTopLevel
|
||||||
|
privateVarTopLevel = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
inline internal fun testTopLevelInline() {
|
inline internal fun publishedTopLevelInline() {
|
||||||
publicFun()
|
publicFun()
|
||||||
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PublishedApi
|
||||||
|
inline internal var publishedVarTopLevel: Int
|
||||||
|
get() {
|
||||||
|
publicFun()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
set(value) {
|
||||||
|
publicFun()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalFun<!>()
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateFun<!>()
|
||||||
|
|
||||||
|
publicVarTopLevel
|
||||||
|
publicVarTopLevel = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>internalVarTopLevel<!> = 1
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!>
|
||||||
|
<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>privateVarTopLevel<!> = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun publicFun() {}
|
fun publicFun() {}
|
||||||
|
|
||||||
internal fun internalFun() {}
|
internal fun internalFun() {}
|
||||||
|
|
||||||
private fun privateFun() {}
|
private fun privateFun() {}
|
||||||
|
|
||||||
|
|
||||||
|
var publicVarTopLevel = 1
|
||||||
|
|
||||||
|
internal var internalVarTopLevel = 1
|
||||||
|
|
||||||
|
private var privateVarTopLevel = 1
|
||||||
@@ -1,14 +1,20 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
|
public var inlineVar: kotlin.Int
|
||||||
|
internal var internalVarTopLevel: kotlin.Int
|
||||||
|
private var privateVarTopLevel: kotlin.Int
|
||||||
|
public var publicVarTopLevel: kotlin.Int
|
||||||
|
@kotlin.PublishedApi internal var publishedVarTopLevel: kotlin.Int
|
||||||
public inline fun call(/*0*/ a: A): kotlin.Unit
|
public inline fun call(/*0*/ a: A): kotlin.Unit
|
||||||
internal fun internalFun(): kotlin.Unit
|
internal fun internalFun(): kotlin.Unit
|
||||||
private fun privateFun(): kotlin.Unit
|
private fun privateFun(): kotlin.Unit
|
||||||
public fun publicFun(): kotlin.Unit
|
public fun publicFun(): kotlin.Unit
|
||||||
@kotlin.PublishedApi internal fun testTopLevel(): kotlin.Unit
|
@kotlin.PublishedApi internal fun publishedTopLevel(): kotlin.Unit
|
||||||
@kotlin.PublishedApi internal inline fun testTopLevelInline(): kotlin.Unit
|
@kotlin.PublishedApi internal inline fun publishedTopLevelInline(): kotlin.Unit
|
||||||
|
|
||||||
@kotlin.PublishedApi internal final class A {
|
@kotlin.PublishedApi internal final class A {
|
||||||
public constructor A()
|
public constructor A()
|
||||||
|
@kotlin.PublishedApi internal final var publishedVar: kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
@kotlin.PublishedApi internal final fun test(): kotlin.Unit
|
@kotlin.PublishedApi internal final fun test(): kotlin.Unit
|
||||||
|
|||||||
@@ -238,13 +238,18 @@ private fun Visibility.forVisibility(descriptor: DeclarationDescriptor, checkPub
|
|||||||
Visibilities.PRIVATE, Visibilities.PRIVATE_TO_THIS, Visibilities.INVISIBLE_FAKE -> Private
|
Visibilities.PRIVATE, Visibilities.PRIVATE_TO_THIS, Visibilities.INVISIBLE_FAKE -> Private
|
||||||
Visibilities.PROTECTED -> Protected(descriptor.containingDeclaration as? ClassDescriptor)
|
Visibilities.PROTECTED -> Protected(descriptor.containingDeclaration as? ClassDescriptor)
|
||||||
Visibilities.INTERNAL -> if (!checkPublishedApi ||
|
Visibilities.INTERNAL -> if (!checkPublishedApi ||
|
||||||
!descriptor.annotations.hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi)) Internal else Public
|
!descriptor.isPublishedApi()) Internal else Public
|
||||||
Visibilities.PUBLIC -> Public
|
Visibilities.PUBLIC -> Public
|
||||||
Visibilities.LOCAL -> Local
|
Visibilities.LOCAL -> Local
|
||||||
// NB: visibility must be already normalized here, so e.g. no JavaVisibilities are possible at this point
|
// NB: visibility must be already normalized here, so e.g. no JavaVisibilities are possible at this point
|
||||||
else -> throw AssertionError("Visibility $name is not allowed in forVisibility")
|
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) =
|
fun effectiveVisibility(visibility: Visibility, descriptor: DeclarationDescriptor, checkPublishedApi: Boolean = false) =
|
||||||
visibility.forVisibility(descriptor, checkPublishedApi)
|
visibility.forVisibility(descriptor, checkPublishedApi)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user