From 6b48ec778024526fcf0878b5c41c8723e092c04e Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Thu, 2 Nov 2023 23:22:04 +0100 Subject: [PATCH] KT-62675 [AA] Refactor KtFirReferenceShortener.kt Separate FIR visitor from collector --- .../fir/components/KtFirReferenceShortener.kt | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt index 998887f406e..78a03daeb16 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt @@ -107,7 +107,7 @@ internal class KtFirReferenceShortener( callableShortenStrategy = { callableShortenStrategy(buildSymbol(it) as KtCallableSymbol) }, firResolveSession, ) - firDeclaration.accept(collector) + firDeclaration.accept(CollectingVisitor(collector)) val additionalImports = AdditionalImports( collector.getNamesToImport(starImport = false).toSet(), @@ -404,17 +404,7 @@ private class ShortenKDocQualifier( override val importAllInParent: Boolean = false ) : ElementToShorten() -private class ElementsToShortenCollector( - private val shortenOptions: ShortenOptions, - private val shorteningContext: FirShorteningContext, - private val towerContextProvider: FirTowerContextProvider, - private val selection: TextRange, - private val classShortenStrategy: (FirClassLikeSymbol<*>) -> ShortenStrategy, - private val callableShortenStrategy: (FirCallableSymbol<*>) -> ShortenStrategy, - private val firResolveSession: LLFirResolveSession, -) : FirVisitorVoid() { - val typesToShorten: MutableList = mutableListOf() - val qualifiersToShorten: MutableList = mutableListOf() +private class CollectingVisitor(private val collector: ElementsToShortenCollector) : FirVisitorVoid() { private val visitedProperty = mutableSetOf() override fun visitValueParameter(valueParameter: FirValueParameter) { @@ -445,7 +435,7 @@ private class ElementsToShortenCollector( } override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { - processTypeRef(resolvedTypeRef) + collector.processTypeRef(resolvedTypeRef) resolvedTypeRef.acceptChildren(this) resolvedTypeRef.delegatedTypeRef?.accept(this) @@ -454,28 +444,41 @@ private class ElementsToShortenCollector( override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { super.visitResolvedQualifier(resolvedQualifier) - processTypeQualifier(resolvedQualifier) + collector.processTypeQualifier(resolvedQualifier) } override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier) { super.visitErrorResolvedQualifier(errorResolvedQualifier) - processTypeQualifier(errorResolvedQualifier) + collector.processTypeQualifier(errorResolvedQualifier) } override fun visitFunctionCall(functionCall: FirFunctionCall) { super.visitFunctionCall(functionCall) - processFunctionCall(functionCall) + collector.processFunctionCall(functionCall) } override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) { super.visitPropertyAccessExpression(propertyAccessExpression) - processPropertyAccess(propertyAccessExpression) + collector.processPropertyAccess(propertyAccessExpression) } +} - private fun processTypeRef(resolvedTypeRef: FirResolvedTypeRef) { +private class ElementsToShortenCollector( + private val shortenOptions: ShortenOptions, + private val shorteningContext: FirShorteningContext, + private val towerContextProvider: FirTowerContextProvider, + private val selection: TextRange, + private val classShortenStrategy: (FirClassLikeSymbol<*>) -> ShortenStrategy, + private val callableShortenStrategy: (FirCallableSymbol<*>) -> ShortenStrategy, + private val firResolveSession: LLFirResolveSession, +) { + val typesToShorten: MutableList = mutableListOf() + val qualifiersToShorten: MutableList = mutableListOf() + + fun processTypeRef(resolvedTypeRef: FirResolvedTypeRef) { val typeElement = resolvedTypeRef.correspondingTypePsi ?: return if (typeElement.qualifier == null) return @@ -540,7 +543,7 @@ private class ElementsToShortenCollector( return if (deepestTypeWithQualifier.hasFakeRootPrefix()) ShortenType(deepestTypeWithQualifier) else null } - private fun processTypeQualifier(resolvedQualifier: FirResolvedQualifier) { + fun processTypeQualifier(resolvedQualifier: FirResolvedQualifier) { if (resolvedQualifier.isImplicitDispatchReceiver) return val wholeClassQualifier = resolvedQualifier.classId ?: return @@ -1040,7 +1043,7 @@ private class ElementsToShortenCollector( candidatesWithinSamePriorityScopes.singleOrNull()?.isInBestCandidates == true } - private fun processPropertyAccess(firPropertyAccess: FirPropertyAccessExpression) { + fun processPropertyAccess(firPropertyAccess: FirPropertyAccessExpression) { // if explicit receiver is a property access or a function call, we cannot shorten it if (!canBePossibleToDropReceiver(firPropertyAccess)) return @@ -1091,7 +1094,7 @@ private class ElementsToShortenCollector( private val FirPropertyAccessExpression.referencedSymbol: FirVariableSymbol<*>? get() = (calleeReference as? FirResolvedNamedReference)?.resolvedSymbol as? FirVariableSymbol<*> - private fun processFunctionCall(functionCall: FirFunctionCall) { + fun processFunctionCall(functionCall: FirFunctionCall) { if (!canBePossibleToDropReceiver(functionCall)) return val qualifiedCallExpression = functionCall.psi as? KtDotQualifiedExpression ?: return