FIR IDE: ignore synthetic references in reference resolve
This commit is contained in:
+10
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.references
|
package org.jetbrains.kotlin.idea.references
|
||||||
|
|
||||||
|
import com.intellij.psi.tree.TokenSet
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -140,6 +142,7 @@ internal object FirReferenceResolveHelper {
|
|||||||
analysisSession: KtFirAnalysisSession
|
analysisSession: KtFirAnalysisSession
|
||||||
): Collection<KtSymbol> {
|
): Collection<KtSymbol> {
|
||||||
val expression = ref.expression
|
val expression = ref.expression
|
||||||
|
if (expression.isSyntheticOperatorReference()) return emptyList()
|
||||||
val symbolBuilder = analysisSession.firSymbolBuilder
|
val symbolBuilder = analysisSession.firSymbolBuilder
|
||||||
val fir = expression.getOrBuildFir(analysisSession.firResolveState)
|
val fir = expression.getOrBuildFir(analysisSession.firResolveState)
|
||||||
val session = analysisSession.firResolveState.rootModuleSession
|
val session = analysisSession.firResolveState.rootModuleSession
|
||||||
@@ -163,6 +166,11 @@ internal object FirReferenceResolveHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun KtSimpleNameExpression.isSyntheticOperatorReference() = when (this) {
|
||||||
|
is KtOperationReferenceExpression -> operationSignTokenType in syntheticTokenTypes
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
private fun getSymbolsByVariableAssignment(
|
private fun getSymbolsByVariableAssignment(
|
||||||
fir: FirVariableAssignment,
|
fir: FirVariableAssignment,
|
||||||
@@ -409,4 +417,6 @@ internal object FirReferenceResolveHelper {
|
|||||||
private tailrec fun KtTypeElement.unwrapNullable(): KtTypeElement? {
|
private tailrec fun KtTypeElement.unwrapNullable(): KtTypeElement? {
|
||||||
return if (this is KtNullableType) innerType?.unwrapNullable() else this
|
return if (this is KtNullableType) innerType?.unwrapNullable() else this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val syntheticTokenTypes = TokenSet.create(KtTokens.ELVIS, KtTokens.EXCLEXCL)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user