KT-62695 [AA] Refactor KDocReferenceResolver.findParentSymbol
Avoid traversing parents when there are none
This commit is contained in:
committed by
Space Team
parent
d45662c2c3
commit
f9348c69ba
+16
-4
@@ -100,15 +100,27 @@ internal object KDocReferenceResolver {
|
||||
private fun findParentSymbol(symbol: KtSymbol, goBackSteps: Int, selectedFqName: FqName): KtSymbol? {
|
||||
if (symbol !is KtDeclarationSymbol && symbol !is KtPackageSymbol) return null
|
||||
|
||||
var currentSymbol = symbol as? KtDeclarationSymbol
|
||||
repeat(goBackSteps) {
|
||||
currentSymbol = currentSymbol?.getContainingSymbol() as? KtClassOrObjectSymbol
|
||||
if (symbol is KtDeclarationSymbol) {
|
||||
symbol.goToNthParent(goBackSteps)?.let { return it }
|
||||
}
|
||||
currentSymbol?.let { return it }
|
||||
|
||||
return getPackageSymbolIfPackageExists(selectedFqName)
|
||||
}
|
||||
|
||||
/**
|
||||
* N.B. Works only for [KtClassOrObjectSymbol] parents chain.
|
||||
*/
|
||||
context(KtAnalysisSession)
|
||||
private fun KtDeclarationSymbol.goToNthParent(steps: Int): KtDeclarationSymbol? {
|
||||
var currentSymbol = this
|
||||
|
||||
repeat(steps) {
|
||||
currentSymbol = currentSymbol.getContainingSymbol() as? KtClassOrObjectSymbol ?: return null
|
||||
}
|
||||
|
||||
return currentSymbol
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
private fun resolveKdocFqName(fqName: FqName, contextElement: KtElement): Collection<ResolveResult> {
|
||||
getExtensionReceiverSymbolByThisQualifier(fqName, contextElement).ifNotEmpty { return this }
|
||||
|
||||
Reference in New Issue
Block a user