[Analysis API FIR] add check for public api
This commit is contained in:
committed by
Space Team
parent
34d695cc72
commit
29502ba126
+14
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.components.KtVisibilityChecker
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirFileSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
|
||||
@@ -19,8 +20,12 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.parentsOfType
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.visibilityChecker
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
@@ -61,6 +66,15 @@ internal class KtFirVisibilityChecker(
|
||||
)
|
||||
}
|
||||
|
||||
override fun isPublicApi(symbol: KtSymbolWithVisibility): Boolean {
|
||||
require(symbol is KtFirSymbol<*>)
|
||||
val declaration = symbol.firSymbol.fir as? FirMemberDeclaration ?: return false
|
||||
|
||||
// Inspecting visibility requires resolving to status
|
||||
declaration.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
return declaration.effectiveVisibility.publicApi || declaration.publishedApiEffectiveVisibility?.publicApi == true
|
||||
}
|
||||
|
||||
private fun collectContainingDeclarations(position: PsiElement): List<FirDeclaration> {
|
||||
val nonLocalContainer = findContainingNonLocalDeclaration(position)
|
||||
val nonLocalContainerFir = nonLocalContainer?.getOrBuildFirSafe<FirDeclaration>(analysisSession.firResolveSession)
|
||||
|
||||
Reference in New Issue
Block a user