Revert "Replace with ordinary assignment: do not suggest when operator is augmented assignment operator function"
This reverts commit 73e319ca
This commit is contained in:
+6
-8
@@ -8,23 +8,21 @@ package org.jetbrains.kotlin.idea.intentions
|
|||||||
import com.intellij.codeInsight.intention.LowPriorityAction
|
import com.intellij.codeInsight.intention.LowPriorityAction
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||||
import org.jetbrains.kotlin.idea.references.mainReference
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.KtBinaryExpression
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
|
||||||
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
|
import org.jetbrains.kotlin.psi.createExpressionByPattern
|
||||||
|
|
||||||
class ReplaceWithOrdinaryAssignmentIntention : SelfTargetingIntention<KtBinaryExpression>(
|
class ReplaceWithOrdinaryAssignmentIntention : SelfTargetingIntention<KtBinaryExpression>(
|
||||||
KtBinaryExpression::class.java,
|
KtBinaryExpression::class.java,
|
||||||
KotlinBundle.lazyMessage("replace.with.ordinary.assignment")
|
KotlinBundle.lazyMessage("replace.with.ordinary.assignment")
|
||||||
), LowPriorityAction {
|
), LowPriorityAction {
|
||||||
override fun isApplicableTo(element: KtBinaryExpression, caretOffset: Int): Boolean {
|
override fun isApplicableTo(element: KtBinaryExpression, caretOffset: Int): Boolean {
|
||||||
val operationReference = element.operationReference
|
|
||||||
if (!operationReference.textRange.containsOffset(caretOffset)) return false
|
|
||||||
if (element.operationToken !in KtTokens.AUGMENTED_ASSIGNMENTS) return false
|
if (element.operationToken !in KtTokens.AUGMENTED_ASSIGNMENTS) return false
|
||||||
val left = element.left ?: return false
|
if (element.left !is KtNameReferenceExpression) return false
|
||||||
if ((left.safeAs<KtQualifiedExpression>()?.selectorExpression ?: left) !is KtNameReferenceExpression) return false
|
|
||||||
if (element.right == null) return false
|
if (element.right == null) return false
|
||||||
return operationReference.mainReference.resolve().safeAs<KtFunction>()?.name?.endsWith("Assign") != true
|
return element.operationReference.textRange.containsOffset(caretOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTo(element: KtBinaryExpression, editor: Editor?) {
|
override fun applyTo(element: KtBinaryExpression, editor: Editor?) {
|
||||||
|
|||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
// IS_APPLICABLE: false
|
|
||||||
operator fun Int.minusAssign(element: Int) {}
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
val x = 1
|
|
||||||
x <caret>-= 9
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
// IS_APPLICABLE: false
|
|
||||||
// WITH_RUNTIME
|
|
||||||
fun main() {
|
|
||||||
val mutableList = mutableListOf(4, 5, 6, 7, 8)
|
|
||||||
mutableList <caret>+= 9
|
|
||||||
}
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
// IS_APPLICABLE: false
|
|
||||||
operator fun Int.plusAssign(element: Int) {}
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
val x = 1
|
|
||||||
x <caret>+= 9
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
class Foo {
|
|
||||||
var x: Int = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
val foo = Foo()
|
|
||||||
foo.x <caret>+= 1
|
|
||||||
}
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
class Foo {
|
|
||||||
var x: Int = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
val foo = Foo()
|
|
||||||
foo.x = foo.x + 1
|
|
||||||
}
|
|
||||||
@@ -18,7 +18,6 @@ org.jetbrains.kotlin.idea.intentions.ConvertPropertyInitializerToGetterIntention
|
|||||||
org.jetbrains.kotlin.idea.intentions.CreateKotlinSubClassIntention
|
org.jetbrains.kotlin.idea.intentions.CreateKotlinSubClassIntention
|
||||||
org.jetbrains.kotlin.idea.intentions.MoveMemberToCompanionObjectIntention
|
org.jetbrains.kotlin.idea.intentions.MoveMemberToCompanionObjectIntention
|
||||||
org.jetbrains.kotlin.idea.intentions.MovePropertyToConstructorIntention
|
org.jetbrains.kotlin.idea.intentions.MovePropertyToConstructorIntention
|
||||||
org.jetbrains.kotlin.idea.intentions.ReplaceWithOrdinaryAssignmentIntention
|
|
||||||
org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention
|
org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention
|
||||||
org.jetbrains.kotlin.idea.quickfix.AddAnnotationTargetFix
|
org.jetbrains.kotlin.idea.quickfix.AddAnnotationTargetFix
|
||||||
org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix
|
org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// "Change 'list' to val" "false"
|
// "Change 'list' to val" "false"
|
||||||
// ACTION: Replace overloaded operator with function call
|
// ACTION: Replace overloaded operator with function call
|
||||||
// ACTION: Replace with 'plusAssign()' call
|
// ACTION: Replace with 'plusAssign()' call
|
||||||
|
// ACTION: Replace with ordinary assignment
|
||||||
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
|
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
|||||||
@@ -15607,16 +15607,6 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/complexRightExpression.kt");
|
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/complexRightExpression.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("minusAssignOperatorFun.kt")
|
|
||||||
public void testMinusAssignOperatorFun() throws Exception {
|
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/minusAssignOperatorFun.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("mutableList.kt")
|
|
||||||
public void testMutableList() throws Exception {
|
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/mutableList.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("nonAssignmentExpression.kt")
|
@TestMetadata("nonAssignmentExpression.kt")
|
||||||
public void testNonAssignmentExpression() throws Exception {
|
public void testNonAssignmentExpression() throws Exception {
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/nonAssignmentExpression.kt");
|
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/nonAssignmentExpression.kt");
|
||||||
@@ -15627,16 +15617,6 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/nonAugmentedAssign.kt");
|
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/nonAugmentedAssign.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("plusAssignOperatorFun.kt")
|
|
||||||
public void testPlusAssignOperatorFun() throws Exception {
|
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/plusAssignOperatorFun.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("qualifiedExpression.kt")
|
|
||||||
public void testQualifiedExpression() throws Exception {
|
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/qualifiedExpression.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("simple.kt")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/simple.kt");
|
runTest("idea/testData/intentions/replaceWithOrdinaryAssignment/simple.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user