KT-62676 [AA] Introduce ShortenOptions class
This class should contain 'global' settings for reference shortening; ATM it only contains the `removeThis` flag In the future this setting might be merged together with `ShortenStrategy` to be computed on per-element basis
This commit is contained in:
+2
@@ -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 {
|
||||
|
||||
+2
@@ -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 {
|
||||
|
||||
+6
-1
@@ -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)
|
||||
}
|
||||
|
||||
+7
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+19
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user