From 95cf892eec0f9b3e89343957315299219522236d Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 30 May 2023 18:16:42 +0200 Subject: [PATCH] [Analysis API] extract the data from the ShortenCommandImpl to the base class ^KT-58992 --- .../components/KtFe10ReferenceShortener.kt | 19 ++++++++++++------- .../fir/components/KtFirReferenceShortener.kt | 16 +++++----------- .../references/ShorteningResultsRenderer.kt | 4 ++-- .../api/components/KtReferenceShortener.kt | 15 +++++++++------ 4 files changed, 28 insertions(+), 26 deletions(-) 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 ac085541bb7..257523b78ab 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components import com.intellij.openapi.util.TextRange +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 @@ -15,13 +16,14 @@ import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnaly import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtUserType internal class KtFe10ReferenceShortener( - override val analysisSession: KtFe10AnalysisSession + override val analysisSession: KtFe10AnalysisSession, ) : KtReferenceShortener(), Fe10KtAnalysisSessionComponent { override val token: KtLifetimeToken get() = analysisSession.token @@ -30,17 +32,20 @@ internal class KtFe10ReferenceShortener( file: KtFile, selection: TextRange, classShortenOption: (KtClassLikeSymbol) -> ShortenOption, - callableShortenOption: (KtCallableSymbol) -> ShortenOption + callableShortenOption: (KtCallableSymbol) -> ShortenOption, ): ShortenCommand { // Compiler implementation does nothing. // Descriptor-based shortening is implemented on the IDE plugin side. + val ktFilePointer = SmartPointerManager.createPointer(file) + return object : ShortenCommand { - override val isEmpty: Boolean - get() = true + override val targetFile: SmartPsiElementPointer get() = ktFilePointer + override val importsToAdd: List get() = emptyList() + override val starImportsToAdd: List get() = emptyList() + override val typesToShorten: List> get() = emptyList() + override val qualifiersToShorten: List> get() = emptyList() - override fun getTypesToShorten(): List> = emptyList() - - override fun getQualifiersToShorten(): List> = emptyList() + override val isEmpty: Boolean get() = true override fun invokeShortening(): List = emptyList() } 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 5d543d9e941..0ba62aca822 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 @@ -1060,11 +1060,11 @@ private class ElementsToShortenCollector( } private class ShortenCommandImpl( - private val targetFile: SmartPsiElementPointer, - private val importsToAdd: List, - private val starImportsToAdd: List, - private val typesToShorten: List>, - private val qualifiersToShorten: List>, + override val targetFile: SmartPsiElementPointer, + override val importsToAdd: List, + override val starImportsToAdd: List, + override val typesToShorten: List>, + override val qualifiersToShorten: List>, ) : ShortenCommand { override fun invokeShortening(): List { @@ -1095,12 +1095,6 @@ private class ShortenCommandImpl( // } return shorteningResults } - - override val isEmpty: Boolean get() = typesToShorten.isEmpty() && qualifiersToShorten.isEmpty() - - override fun getTypesToShorten(): List> = typesToShorten - - override fun getQualifiersToShorten(): List> = qualifiersToShorten } private fun KtUserType.hasFakeRootPrefix(): Boolean = diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/ShorteningResultsRenderer.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/ShorteningResultsRenderer.kt index 47ca4212465..c5058e1ded4 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/ShorteningResultsRenderer.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/ShorteningResultsRenderer.kt @@ -14,12 +14,12 @@ internal object ShorteningResultsRenderer { return } - shortening.getTypesToShorten().forEach { userType -> + shortening.typesToShorten.forEach { userType -> userType.element?.text?.let { appendLine("[type] $it") } } - shortening.getQualifiersToShorten().forEach { qualifier -> + shortening.qualifiersToShorten.forEach { qualifier -> qualifier.element?.text?.let { appendLine("[qualifier] $it") } 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 04aa5f8a553..99a171f8831 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 @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile @@ -118,12 +119,14 @@ public interface KtReferenceShortenerMixIn : KtAnalysisSessionMixIn { } public interface ShortenCommand { - /** - * Shortens target elements, adds necessary import, and returns a list of the shortened result elements. - */ - public fun invokeShortening(): List + public val targetFile: SmartPsiElementPointer + public val importsToAdd: List + public val starImportsToAdd: List + public val typesToShorten: List> + public val qualifiersToShorten: List> public val isEmpty: Boolean - public fun getTypesToShorten(): List> - public fun getQualifiersToShorten(): List> + get() = typesToShorten.isEmpty() && qualifiersToShorten.isEmpty() + + public fun invokeShortening(): List } \ No newline at end of file