diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ReferenceShortener.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ReferenceShortener.kt index 515c37a3922..85271b840c8 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ReferenceShortener.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ReferenceShortener.kt @@ -10,6 +10,7 @@ import com.intellij.psi.SmartPointerManager import com.intellij.psi.SmartPsiElementPointer import org.jetbrains.kotlin.analysis.api.components.KtReferenceShortener import org.jetbrains.kotlin.analysis.api.components.ShortenCommand +import org.jetbrains.kotlin.analysis.api.components.ShortenOptions import org.jetbrains.kotlin.analysis.api.components.ShortenStrategy import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent @@ -31,6 +32,7 @@ internal class KtFe10ReferenceShortener( override fun collectShortenings( file: KtFile, selection: TextRange, + shortenOptions: ShortenOptions, classShortenStrategy: (KtClassLikeSymbol) -> ShortenStrategy, callableShortenStrategy: (KtCallableSymbol) -> ShortenStrategy, ): ShortenCommand { 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 a7022251801..f14be1f04e3 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 @@ -12,6 +12,7 @@ import com.intellij.psi.SmartPsiElementPointer import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.analysis.api.components.KtReferenceShortener import org.jetbrains.kotlin.analysis.api.components.ShortenCommand +import org.jetbrains.kotlin.analysis.api.components.ShortenOptions import org.jetbrains.kotlin.analysis.api.components.ShortenStrategy import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.components.ElementsToShortenCollector.PartialOrderOfScope.Companion.toPartialOrder @@ -78,6 +79,7 @@ internal class KtFirReferenceShortener( override fun collectShortenings( file: KtFile, selection: TextRange, + shortenOptions: ShortenOptions, classShortenStrategy: (KtClassLikeSymbol) -> ShortenStrategy, callableShortenStrategy: (KtCallableSymbol) -> ShortenStrategy ): ShortenCommand { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerForWholeFileTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerForWholeFileTest.kt index c34d256ee24..a466f76d7cd 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerForWholeFileTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerForWholeFileTest.kt @@ -21,7 +21,12 @@ abstract class AbstractReferenceShortenerForWholeFileTest : AbstractAnalysisApiB val shortenings = executeOnPooledThreadInReadAction { analyseForTest(file) { ShortenStrategy.values().map { option -> - val shorteningsForOption = collectPossibleReferenceShortenings(file, file.textRange, { option }, { option }) + val shorteningsForOption = collectPossibleReferenceShortenings( + file, + file.textRange, + classShortenStrategy = { option }, + callableShortenStrategy = { option } + ) Pair(option.name, shorteningsForOption) } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerTest.kt index 9d7673a90e4..81c30296360 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceShortenerTest.kt @@ -28,7 +28,13 @@ abstract class AbstractReferenceShortenerTest : AbstractAnalysisApiBasedSingleMo val shortenings = executeOnPooledThreadInReadAction { analyseForTest(element) { ShortenStrategy.values().map { option -> - Pair(option.name, collectPossibleReferenceShorteningsInElement(element, { option }, { option })) + val shorteningsForOption = collectPossibleReferenceShorteningsInElement( + element, + classShortenStrategy = { option }, + callableShortenStrategy = { option } + ) + + Pair(option.name, shorteningsForOption) } } } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtReferenceShortener.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtReferenceShortener.kt index 8cf80608419..59ba6096c7b 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtReferenceShortener.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtReferenceShortener.kt @@ -20,6 +20,20 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtUserType +/** + * @property removeThis If set to `true`, reference shortener will detect redundant `this` qualifiers + * and will collect them to [ShortenCommand.qualifiersToShorten]. + */ +public data class ShortenOptions( + public val removeThis: Boolean = false, +) { + public companion object { + public val DEFAULT: ShortenOptions = ShortenOptions() + + public val ALL_ENABLED: ShortenOptions = ShortenOptions(removeThis = true) + } +} + public enum class ShortenStrategy { /** Skip shortening references to this symbol. */ DO_NOT_SHORTEN, @@ -78,6 +92,7 @@ public abstract class KtReferenceShortener : KtAnalysisSessionComponent() { public abstract fun collectShortenings( file: KtFile, selection: TextRange, + shortenOptions: ShortenOptions, classShortenStrategy: (KtClassLikeSymbol) -> ShortenStrategy, callableShortenStrategy: (KtCallableSymbol) -> ShortenStrategy ): ShortenCommand @@ -97,6 +112,7 @@ public interface KtReferenceShortenerMixIn : KtAnalysisSessionMixIn { public fun collectPossibleReferenceShortenings( file: KtFile, selection: TextRange = file.textRange, + shortenOptions: ShortenOptions = ShortenOptions.DEFAULT, classShortenStrategy: (KtClassLikeSymbol) -> ShortenStrategy = defaultClassShortenStrategy, callableShortenStrategy: (KtCallableSymbol) -> ShortenStrategy = defaultCallableShortenStrategy ): ShortenCommand = @@ -104,6 +120,7 @@ public interface KtReferenceShortenerMixIn : KtAnalysisSessionMixIn { analysisSession.referenceShortener.collectShortenings( file, selection, + shortenOptions, classShortenStrategy, callableShortenStrategy ) @@ -120,6 +137,7 @@ public interface KtReferenceShortenerMixIn : KtAnalysisSessionMixIn { */ public fun collectPossibleReferenceShorteningsInElement( element: KtElement, + shortenOptions: ShortenOptions = ShortenOptions.DEFAULT, classShortenStrategy: (KtClassLikeSymbol) -> ShortenStrategy = defaultClassShortenStrategy, callableShortenStrategy: (KtCallableSymbol) -> ShortenStrategy = defaultCallableShortenStrategy ): ShortenCommand = @@ -127,6 +145,7 @@ public interface KtReferenceShortenerMixIn : KtAnalysisSessionMixIn { analysisSession.referenceShortener.collectShortenings( element.containingKtFile, element.textRange, + shortenOptions, classShortenStrategy, callableShortenStrategy )