FIR IDE: rename reference classes to KtFir*Reference for consistency

This commit is contained in:
Ilya Kirillov
2020-06-27 00:18:16 +03:00
parent 66933ea2fe
commit 226d514788
21 changed files with 65 additions and 68 deletions
@@ -11,8 +11,8 @@ import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.fir.highlighter.visitors.FirAfterResolveHighlightingVisitor
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.highlighter.AbstractKotlinPsiChecker
import org.jetbrains.kotlin.idea.highlighter.Diagnostic2Annotation
import org.jetbrains.kotlin.idea.highlighter.IdeErrorMessages
@@ -29,7 +29,7 @@ class KotlinFirPsiChecker : AbstractKotlinPsiChecker() {
if (ApplicationManager.getApplication().isDispatchThread) {
throw ProcessCanceledException()
}
val analysisSession = FirAnalysisSession(element)
val analysisSession = KtFirAnalysisSession(element)
highlightDiagnostics(element, analysisSession, holder)
@@ -38,7 +38,7 @@ class KotlinFirPsiChecker : AbstractKotlinPsiChecker() {
.forEach(element::accept)
}
private fun highlightDiagnostics(element: KtElement, analysisSession: FrontendAnalysisSession, holder: AnnotationHolder) {
private fun highlightDiagnostics(element: KtElement, analysisSession: KtAnalysisSession, holder: AnnotationHolder) {
val diagnostics = analysisSession.getDiagnosticsForElement(element)
if (diagnostics.isEmpty()) return
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.idea.fir.highlighter.visitors
import com.intellij.lang.annotation.AnnotationHolder
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.KotlinIdeaAnalysisBundle
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartcastKind
import org.jetbrains.kotlin.psi.*
internal class ExpressionsSmartcastHighlightingVisitor(
analysisSession: FrontendAnalysisSession,
analysisSession: KtAnalysisSession,
holder: AnnotationHolder
) : FirAfterResolveHighlightingVisitor(analysisSession, holder) {
override fun visitExpression(expression: KtExpression) {
@@ -6,17 +6,17 @@
package org.jetbrains.kotlin.idea.fir.highlighter.visitors
import com.intellij.lang.annotation.AnnotationHolder
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.highlighter.HighlightingVisitor
abstract class FirAfterResolveHighlightingVisitor(
protected val analysisSession: FrontendAnalysisSession,
protected val analysisSession: KtAnalysisSession,
protected val holder: AnnotationHolder
) : HighlightingVisitor(holder) {
companion object {
fun createListOfVisitors(
analysisSession: FrontendAnalysisSession,
analysisSession: KtAnalysisSession,
holder: AnnotationHolder
): List<FirAfterResolveHighlightingVisitor> = listOf(
TypeHighlightingVisitor(analysisSession, holder),
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.serialization.deserialization.KOTLIN_SUSPEND_BUILT_I
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingColors as Colors
internal class FunctionCallHighlightingVisitor(
analysisSession: FrontendAnalysisSession,
analysisSession: KtAnalysisSession,
holder: AnnotationHolder
) : FirAfterResolveHighlightingVisitor(analysisSession, holder) {
override fun visitBinaryExpression(expression: KtBinaryExpression) {
@@ -11,14 +11,14 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.idea.fir.highlighter.isAnnotationClass
import org.jetbrains.kotlin.idea.fir.highlighter.textAttributesKeyForTypeDeclaration
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.highlighter.NameHighlighter
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingColors as Colors
internal class TypeHighlightingVisitor(
analysisSession: FrontendAnalysisSession,
analysisSession: KtAnalysisSession,
holder: AnnotationHolder
) : FirAfterResolveHighlightingVisitor(analysisSession, holder) {
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) {
@@ -14,7 +14,7 @@ import com.intellij.psi.util.PsiUtilCore
import com.intellij.psi.util.parentOfType
import org.jetbrains.kotlin.idea.KotlinIdeaAnalysisBundle
import org.jetbrains.kotlin.idea.fir.highlighter.textAttributesKeyForPropertyDeclaration
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.highlighter.NameHighlighter
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.lexer.KtTokens
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingColors as Colors
internal class VariableReferenceHighlightingVisitor(
analysisSession: FrontendAnalysisSession,
analysisSession: KtAnalysisSession,
holder: AnnotationHolder
) : FirAfterResolveHighlightingVisitor(analysisSession, holder) {
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.psi.*
abstract class FrontendAnalysisSession(project: Project) : Invalidatable {
abstract class KtAnalysisSession(project: Project) : Invalidatable {
protected open val validityToken = ReadActionConfinementValidityToken(project)
override fun isValid(): Boolean = validityToken.isValid()
override fun invalidationReason(): String = validityToken.invalidationReason()
@@ -10,15 +10,15 @@ import org.jetbrains.kotlin.idea.references.KtReference
import org.jetbrains.kotlin.idea.references.KtSimpleReference
interface KtSymbolBasedReference : KtReference {
fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol>
fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol>
}
fun KtReference.resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
fun KtReference.resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
check(this is KtSymbolBasedReference) { "To get reference symbol the one should be KtSymbolBasedReference" }
return resolveToSymbols(analysisSession)
}
fun KtSimpleReference<*>.resolveToSymbol(analysisSession: FrontendAnalysisSession): KtSymbol? {
fun KtSimpleReference<*>.resolveToSymbol(analysisSession: KtAnalysisSession): KtSymbol? {
check(this is KtSymbolBasedReference) { "To get reference symbol the one should be KtSymbolBasedReference" }
return resolveToSymbols(analysisSession).singleOrNull()
}
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.idea.fir.*
import org.jetbrains.kotlin.idea.fir.low.level.api.LowLevelFirApiFacade
import org.jetbrains.kotlin.idea.frontend.api.*
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.FirKtSymbolProvider
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbolProvider
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolProvider
@@ -32,9 +32,9 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
class FirAnalysisSession(
class KtFirAnalysisSession(
element: KtElement
) : FrontendAnalysisSession(element.project) {
) : KtAnalysisSession(element.project) {
internal val token get() = validityToken
internal val firSymbolBuilder = KtSymbolByFirBuilder(
@@ -44,7 +44,7 @@ class FirAnalysisSession(
)
override val symbolProvider: KtSymbolProvider =
FirKtSymbolProvider(
KtFirSymbolProvider(
this,
element.session.firSymbolProvider,
firSymbolBuilder
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.psi.*
internal class FirKtSymbolProvider(
internal class KtFirSymbolProvider(
override val token: Invalidatable,
firSymbolProvider: FirSymbolProvider,
private val firSymbolBuilder: KtSymbolByFirBuilder
@@ -82,7 +82,7 @@ internal object FirReferenceResolveHelper {
}
internal fun resolveSimpleNameReference(
ref: KtSimpleNameReferenceFirImpl,
ref: KtFirSimpleNameReference,
symbolBuilder: KtSymbolByFirBuilder
): Collection<KtSymbol> {
val expression = ref.expression
@@ -6,18 +6,18 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtImportAlias
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
internal class KtSimpleNameReferenceFirImpl(
internal class KtFirSimpleNameReference(
expression: KtSimpleNameExpression
) : KtSimpleNameReference(expression), FirKtReference {
override fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
check(analysisSession is FirAnalysisSession)
) : KtSimpleNameReference(expression), KtFirReference {
override fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
check(analysisSession is KtFirAnalysisSession)
return FirReferenceResolveHelper.resolveSimpleNameReference(this, analysisSession.firSymbolBuilder)
}
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.idea.references
class KotlinFirReferenceContributor : KotlinReferenceProviderContributor {
override fun registerReferenceProviders(registrar: KotlinPsiReferenceRegistrar) {
with(registrar) {
registerProvider(factory = ::KtSimpleNameReferenceFirImpl)
registerProvider(factory = ::KtForLoopInReferenceFirImpl)
registerProvider(factory = ::KtInvokeFunctionReferenceFirImpl)
registerProvider(factory = ::KtPropertyDelegationMethodsReferenceFirImpl)
registerProvider(factory = ::KtDestructuringDeclarationReferenceFirImpl)
registerProvider(factory = ::KtFirSimpleNameReference)
registerProvider(factory = ::KtFirForLoopInReference)
registerProvider(factory = ::KtFirInvokeFunctionReference)
registerProvider(factory = ::KtFirPropertyDelegationMethodsReference)
registerProvider(factory = ::KtFirDestructuringDeclarationReference)
}
}
}
@@ -9,19 +9,19 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.idea.fir.getCalleeSymbol
import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry
class KtDestructuringDeclarationReferenceFirImpl(
class KtFirDestructuringDeclarationReference(
element: KtDestructuringDeclarationEntry
) : KtDestructuringDeclarationReference(element), FirKtReference {
) : KtDestructuringDeclarationReference(element), KtFirReference {
override fun canRename(): Boolean = false //todo
override fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
check(analysisSession is FirAnalysisSession)
override fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
check(analysisSession is KtFirAnalysisSession)
val fir = expression.getOrBuildFirSafe<FirProperty>() ?: return emptyList()
val componentFunctionSymbol = (fir.initializer as? FirComponentCall)?.getCalleeSymbol() ?: return emptyList()
return listOfNotNull(componentFunctionSymbol.fir.buildSymbol(analysisSession.firSymbolBuilder))
@@ -11,16 +11,15 @@ import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
import org.jetbrains.kotlin.idea.fir.getResolvedSymbolOfNameReference
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.psi.KtForExpression
open class KtForLoopInReferenceFirImpl(expression: KtForExpression) : KtForLoopInReference(expression), FirKtReference {
override fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
check(analysisSession is FirAnalysisSession)
open class KtFirForLoopInReference(expression: KtForExpression) : KtForLoopInReference(expression), KtFirReference {
override fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
check(analysisSession is KtFirAnalysisSession)
val firLoop = expression.getOrBuildFirSafe<FirWhileLoop>() ?: return emptyList()
val condition = firLoop.condition as? FirFunctionCall
val iterator = run {
@@ -5,19 +5,18 @@
package org.jetbrains.kotlin.idea.references
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.VariableAsFunctionLikeCallInfo
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtExpression
class KtInvokeFunctionReferenceFirImpl(expression: KtCallExpression) : KtInvokeFunctionReference(expression), FirKtReference {
class KtFirInvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFirReference {
override fun doRenameImplicitConventionalCall(newName: String?): KtExpression {
TODO("Not yet implemented")
}
override fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
override fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
val call = analysisSession.resolveCall(expression) ?: return emptyList()
if (call is VariableAsFunctionLikeCallInfo) {
return listOf(call.invokeFunction)
@@ -11,18 +11,18 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.idea.fir.*
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtPropertyDelegate
class KtPropertyDelegationMethodsReferenceFirImpl(
class KtFirPropertyDelegationMethodsReference(
element: KtPropertyDelegate
) : KtPropertyDelegationMethodsReference(element), FirKtReference {
override fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol> {
check(analysisSession is FirAnalysisSession)
) : KtPropertyDelegationMethodsReference(element), KtFirReference {
override fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol> {
check(analysisSession is KtFirAnalysisSession)
val property = (expression.parent as? KtElement)?.getOrBuildFirSafe<FirProperty>() ?: return emptyList()
if (property.delegate == null) return emptyList()
val getValueSymbol = (property.getter?.singleStatementOfType<FirReturnExpression>()?.result as? FirFunctionCall)?.getCalleeSymbol()
@@ -6,13 +6,13 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.frontend.api.FrontendAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
interface FirKtReference : KtReference {
fun resolveToSymbols(analysisSession: FrontendAnalysisSession): Collection<KtSymbol>
interface KtFirReference : KtReference {
fun resolveToSymbols(analysisSession: KtAnalysisSession): Collection<KtSymbol>
fun getResolvedToPsi(analysisSession: FrontendAnalysisSession): Collection<PsiElement> =
fun getResolvedToPsi(analysisSession: KtAnalysisSession): Collection<PsiElement> =
resolveToSymbols(analysisSession).mapNotNull(KtSymbol::psi)
override val resolver get() = KtFirReferenceResolver
@@ -11,18 +11,18 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementResolveResult
import com.intellij.psi.ResolveResult
import com.intellij.psi.impl.source.resolve.ResolveCache
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
object KtFirReferenceResolver : ResolveCache.PolyVariantResolver<KtReference> {
class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element)
override fun resolve(ref: KtReference, incompleteCode: Boolean): Array<ResolveResult> {
check(ref is FirKtReference) { "reference should be FirKtReference, but was ${ref::class}" }
check(ref is KtFirReference) { "reference should be FirKtReference, but was ${ref::class}" }
check(ref is AbstractKtReference<*>) { "reference should be AbstractKtReference, but was ${ref::class}" }
if (ApplicationManager.getApplication().isDispatchThread) {
throw ProcessCanceledException()
}
val analysisSession = FirAnalysisSession(ref.expression)
val analysisSession = KtFirAnalysisSession(ref.expression)
val resolveToPsiElements = ref.getResolvedToPsi(analysisSession)
return resolveToPsiElements.map { KotlinResolveResult(it) }.toTypedArray()
}
@@ -39,7 +39,7 @@ abstract class AbstractResolveCallTest : @Suppress("DEPRECATION") KotlinLightCod
}
val actualText = executeOnPooledThreadInReadAction {
val analysisSession = FirAnalysisSession(file as KtFile)
val analysisSession = KtFirAnalysisSession(file as KtFile)
val callInfos = elements.map { element ->
when (element) {
is KtCallExpression -> analysisSession.resolveCall(element)
@@ -6,10 +6,9 @@
package org.jetbrains.kotlin.idea.frontend.api.symbols
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiRecursiveElementWalkingVisitor
import org.jetbrains.kotlin.idea.addExternalTestFiles
import org.jetbrains.kotlin.idea.executeOnPooledThreadInReadAction
import org.jetbrains.kotlin.idea.frontend.api.fir.FirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtFile
@@ -24,7 +23,7 @@ abstract class AbstractSymbolsByPsiBuildingTest : KotlinLightCodeInsightFixtureT
val ktFile = myFixture.configureByText(file.name, FileUtil.loadFile(file)) as KtFile
val renderedSymbols = executeOnPooledThreadInReadAction {
val analysisSession = FirAnalysisSession(ktFile)
val analysisSession = KtFirAnalysisSession(ktFile)
val declarationSymbols = ktFile.collectDescendantsOfType<KtDeclaration>().map { declaration ->
analysisSession.symbolProvider.getSymbol(declaration)
}