jvm-abi-gen: Mark all anonymous objects in inline function scope as public

Anonymous objects inside of a private inline function nested in a public
inline function can still escape.
This commit is contained in:
Steven Schäfer
2021-06-29 16:43:45 +02:00
committed by Alexander Udalov
parent d94817cfb6
commit 3ffe495346
11 changed files with 115 additions and 15 deletions
@@ -418,9 +418,20 @@ class PsiSourceCompilerForInline(
fun DeclarationDescriptor.isInlineOrInsideInline(): Boolean =
getInlineCallSiteVisibility() != null
fun DeclarationDescriptor.getInlineCallSiteVisibility(): DescriptorVisibility? =
if (this is FunctionDescriptor && isInline) visibility
else containingDeclaration?.getInlineCallSiteVisibility()
fun DeclarationDescriptor.getInlineCallSiteVisibility(): DescriptorVisibility? {
var declaration: DeclarationDescriptor? = this
var result: DescriptorVisibility? = null
while (declaration != null) {
if (declaration is FunctionDescriptor && declaration.isInline) {
if (!DescriptorVisibilities.isPrivate(declaration.visibility)) {
return declaration.visibility
}
result = declaration.visibility
}
declaration = declaration.containingDeclaration
}
return result
}
fun getDeclarationLabels(lambdaOrFun: PsiElement?, descriptor: DeclarationDescriptor): Set<String> {
val result = HashSet<String>()