Changes on code review
This commit is contained in:
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.constant
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
@@ -149,8 +150,12 @@ public enum class ReferenceAccess {
|
||||
|
||||
public fun JetExpression.readWriteAccess(useResolveForReadWrite: Boolean): ReferenceAccess {
|
||||
var expression = getQualifiedExpressionForSelectorOrThis()
|
||||
while (expression.parent is JetParenthesizedExpression || expression.parent is JetAnnotatedExpression) {
|
||||
expression = expression.parent as JetExpression
|
||||
loop@ while (true) {
|
||||
val parent = expression.parent
|
||||
when (parent) {
|
||||
is JetParenthesizedExpression, is JetAnnotatedExpression, is JetLabeledExpression -> expression = parent as JetExpression
|
||||
else -> break@loop
|
||||
}
|
||||
}
|
||||
|
||||
val assignment = expression.getAssignmentByLHS()
|
||||
@@ -164,7 +169,7 @@ public fun JetExpression.readWriteAccess(useResolveForReadWrite: Boolean): Refer
|
||||
val bindingContext = assignment.analyze(BodyResolveMode.PARTIAL)
|
||||
val resolvedCall = assignment.getResolvedCall(bindingContext) ?: return ReferenceAccess.READ_WRITE
|
||||
if (!resolvedCall.status.isSuccess) return ReferenceAccess.READ_WRITE
|
||||
return if (resolvedCall.resultingDescriptor.name.asString().endsWith("Assign"))
|
||||
return if (resolvedCall.resultingDescriptor.name in OperatorConventions.ASSIGNMENT_OPERATIONS.values())
|
||||
ReferenceAccess.READ
|
||||
else
|
||||
ReferenceAccess.READ_WRITE
|
||||
|
||||
+4
-1
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.search.ideaExtensions
|
||||
|
||||
import com.intellij.codeInsight.highlighting.JavaReadWriteAccessDetector
|
||||
import com.intellij.codeInsight.highlighting.ReadWriteAccessDetector
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiReference
|
||||
@@ -56,7 +57,9 @@ public class KotlinReadWriteAccessDetector : ReadWriteAccessDetector() {
|
||||
}
|
||||
|
||||
override fun getExpressionAccess(expression: PsiElement): ReadWriteAccessDetector.Access {
|
||||
if (expression !is JetExpression) return ReadWriteAccessDetector.Access.Read
|
||||
if (expression !is JetExpression) { //TODO: there should be a more correct scheme of access type detection for cross-language references
|
||||
return JavaReadWriteAccessDetector().getExpressionAccess(expression)
|
||||
}
|
||||
|
||||
return when (expression.readWriteAccess(useResolveForReadWrite = true)) {
|
||||
ReferenceAccess.READ -> ReadWriteAccessDetector.Access.Read
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// OPTIONS: skipWrite
|
||||
fun foo() {
|
||||
var <caret>v = 1
|
||||
(@X v) = 2
|
||||
(X@ v) = 2
|
||||
print(v)
|
||||
++ @X v
|
||||
v--
|
||||
|
||||
Reference in New Issue
Block a user