From 7a37a7b2a04c36f026bff05cb6e6e6a22ab7648a Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 6 Sep 2021 14:42:04 +0300 Subject: [PATCH] [FIR IDE] Refactor `KtFirReferenceShortener::findClassifierElementsToShorten` Instead of filtering lambda, pass only qualified elements to the function (because non-qualified elements cannot possibly be shortened) --- .../fir/components/KtFirReferenceShortener.kt | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt index 8d722ce8622..92475e51f95 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt @@ -335,20 +335,18 @@ private class ElementsToShortenCollector( private fun findTypeToShorten(wholeClassifierId: ClassId, wholeTypeElement: KtUserType): ElementToShorten? { val positionScopes = shorteningContext.findScopesAtPosition(wholeTypeElement, namesToImport, towerContextProvider) ?: return null val allClassIds = wholeClassifierId.outerClassesWithSelf - val allTypeElements = wholeTypeElement.qualifiersWithSelf + val allQualifiedTypeElements = wholeTypeElement.qualifiersWithSelf.takeWhile { it.qualifier != null } return findClassifierElementsToShorten( positionScopes, allClassIds, - allTypeElements, + allQualifiedTypeElements, ::ShortenType, this::findFakePackageToShorten - ) { - it.qualifier != null - } + ) } private fun findFakePackageToShorten(typeElement: KtUserType): ShortenType? { - val deepestTypeWithQualifier = typeElement.qualifiersWithSelf.last().parent as? KtUserType + val deepestTypeWithQualifier = typeElement.qualifiersWithSelf.takeWhile { it.qualifier != null }.lastOrNull() ?: error("Type element should have at least one qualifier, instead it was ${typeElement.text}") return if (deepestTypeWithQualifier.hasFakeRootPrefix()) ShortenType(deepestTypeWithQualifier) else null @@ -387,14 +385,12 @@ private class ElementsToShortenCollector( private inline fun findClassifierElementsToShorten( positionScopes: List, allClassIds: Sequence, - allElements: Sequence, + allQualifiedElements: Sequence, createElementToShorten: (E, nameToImport: FqName?, importAllInParent: Boolean) -> ElementToShorten, findFakePackageToShortenFn: (E) -> ElementToShorten?, - elementFilter: (E) -> Boolean = { true }, ): ElementToShorten? { - for ((classId, element) in allClassIds.zip(allElements)) { - if (!elementFilter(element)) return null + for ((classId, element) in allClassIds.zip(allQualifiedElements)) { val option = classShortenOption(shorteningContext.toClassSymbol(classId) ?: return null) if (option == ShortenOption.DO_NOT_SHORTEN) continue @@ -434,7 +430,7 @@ private class ElementsToShortenCollector( } } } - return findFakePackageToShortenFn(allElements.last()) + return findFakePackageToShortenFn(allQualifiedElements.last()) } private fun processPropertyReference(resolvedNamedReference: FirResolvedNamedReference) {