diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt index 98d3e6d3456..91ca1f4e53c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.references +import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* 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.symbols.KtFirPackageSymbol 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.FqName import org.jetbrains.kotlin.psi.* @@ -140,6 +142,7 @@ internal object FirReferenceResolveHelper { analysisSession: KtFirAnalysisSession ): Collection { val expression = ref.expression + if (expression.isSyntheticOperatorReference()) return emptyList() val symbolBuilder = analysisSession.firSymbolBuilder val fir = expression.getOrBuildFir(analysisSession.firResolveState) 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) private fun getSymbolsByVariableAssignment( fir: FirVariableAssignment, @@ -409,4 +417,6 @@ internal object FirReferenceResolveHelper { private tailrec fun KtTypeElement.unwrapNullable(): KtTypeElement? { return if (this is KtNullableType) innerType?.unwrapNullable() else this } + + private val syntheticTokenTypes = TokenSet.create(KtTokens.ELVIS, KtTokens.EXCLEXCL) }