From 0e244b3fbf04f90b92065a58fb1b672a7248863c Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Wed, 10 Jan 2024 21:05:47 +0100 Subject: [PATCH] KTIJ-27841 [AA] Introduce intermediate `ElementsToShortenCollector.importBreaksExistingReferences` This clarifies the semantics a little bit --- .../api/fir/components/KtFirReferenceShortener.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 b9c6566a1b9..fa315184895 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 @@ -822,7 +822,7 @@ private class ElementsToShortenCollector( if (option == ShortenStrategy.SHORTEN_IF_ALREADY_IMPORTED) return null val importAllInParent = option == ShortenStrategy.SHORTEN_AND_STAR_IMPORT - if (importAffectsUsagesOfClassesWithSameName(qualifierClassId, qualifierElement.containingKtFile, importAllInParent)) return null + if (importBreaksExistingReferences(qualifierClassId, qualifierElement.containingKtFile, importAllInParent)) return null // Find class with the same name that's already available in this file. val availableClassifier = shorteningContext.findFirstClassifierInScopesByName(positionScopes, qualifierClassId.shortClassName) @@ -918,6 +918,17 @@ private class ElementsToShortenCollector( } } + /** + * Returns `true` if adding [classToImport] import to the [file] might alter or break the + * resolve of existing references in the file. + * + * N.B.: At the moment it might have both false positives and false negatives, since it does not + * check all possible references. + */ + private fun importBreaksExistingReferences(classToImport: ClassId, file: KtFile, importAllInParent: Boolean): Boolean { + return importAffectsUsagesOfClassesWithSameName(classToImport, file, importAllInParent) + } + private fun importedClassifierOverwritesAvailableClassifier( availableClassifier: AvailableSymbol>, importAllInParent: Boolean