Fix usage of readWriteAccess without resolve

^KTIJ-19777 fixed
This commit is contained in:
Ilya Kirillov
2021-09-30 00:19:23 +02:00
parent c1754ad427
commit c8c1ee2b5a
2 changed files with 13 additions and 9 deletions
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.idea.references.FirReferenceResolveHelper import org.jetbrains.kotlin.idea.references.FirReferenceResolveHelper
import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.idea.references.readWriteAccessWithFullExpressionWithPossibleResolve
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.findAssignment import org.jetbrains.kotlin.psi.psiUtil.findAssignment
@@ -59,7 +59,11 @@ internal class KtFirCallResolver(
when (val fir = call.getOrBuildFir(firResolveState)) { when (val fir = call.getOrBuildFir(firResolveState)) {
is FirResolvedNamedReference -> { is FirResolvedNamedReference -> {
val propertySymbol = fir.resolvedSymbol as? FirPropertySymbol ?: return null val propertySymbol = fir.resolvedSymbol as? FirPropertySymbol ?: return null
val access = call.readWriteAccess(useResolveForReadWrite = false)
@Suppress("DEPRECATION")
val access =
call.readWriteAccessWithFullExpressionWithPossibleResolve(readWriteAccessWithFullExpressionByResolve = { null }).first
val setterValue = findAssignment(call)?.right val setterValue = findAssignment(call)?.right
val accessor = when { val accessor = when {
access.isWrite -> propertySymbol.setterSymbol?.fir access.isWrite -> propertySymbol.setterSymbol?.fir
@@ -31,12 +31,12 @@ val KtElement.mainReference: KtReference?
else -> references.firstIsInstanceOrNull() else -> references.firstIsInstanceOrNull()
} }
fun KtExpression.readWriteAccess(useResolveForReadWrite: Boolean) = @Deprecated(
readWriteAccessWithFullExpression(useResolveForReadWrite).first "Not for the IDE usage",
replaceWith = ReplaceWith("readWriteAccessWithFullExpression", "org.jetbrains.kotlin.idea.references")
fun KtExpression.readWriteAccessWithFullExpression( )
useResolveForReadWrite: Boolean, fun KtExpression.readWriteAccessWithFullExpressionWithPossibleResolve(
readWriteAccessWithFullExpressionByResolve: (KtBinaryExpression) -> Pair<ReferenceAccess, KtExpression>? = { null }, readWriteAccessWithFullExpressionByResolve: (KtBinaryExpression) -> Pair<ReferenceAccess, KtExpression>?,
): Pair<ReferenceAccess, KtExpression> { ): Pair<ReferenceAccess, KtExpression> {
var expression = getQualifiedExpressionForSelectorOrThis() var expression = getQualifiedExpressionForSelectorOrThis()
loop@ while (true) { loop@ while (true) {
@@ -52,7 +52,7 @@ fun KtExpression.readWriteAccessWithFullExpression(
KtTokens.EQ -> ReferenceAccess.WRITE to assignment KtTokens.EQ -> ReferenceAccess.WRITE to assignment
else -> { else -> {
(if (useResolveForReadWrite) readWriteAccessWithFullExpressionByResolve(assignment) else null) readWriteAccessWithFullExpressionByResolve(assignment)
?: (ReferenceAccess.READ_WRITE to assignment) ?: (ReferenceAccess.READ_WRITE to assignment)
} }
} }