Array equality: replace Arrays.equals with contentEquals in intention
This commit is contained in:
+3
-10
@@ -18,11 +18,8 @@ package org.jetbrains.kotlin.idea.intentions
|
|||||||
|
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
|
|
||||||
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
|
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.psi.KtBinaryExpression
|
import org.jetbrains.kotlin.psi.KtBinaryExpression
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
import org.jetbrains.kotlin.psi.createExpressionByPattern
|
import org.jetbrains.kotlin.psi.createExpressionByPattern
|
||||||
@@ -33,7 +30,7 @@ class ReplaceArrayEqualityOpWithArraysEqualsInspection :
|
|||||||
|
|
||||||
class ReplaceArrayEqualityOpWithArraysEqualsIntention : SelfTargetingOffsetIndependentIntention<KtBinaryExpression>(
|
class ReplaceArrayEqualityOpWithArraysEqualsIntention : SelfTargetingOffsetIndependentIntention<KtBinaryExpression>(
|
||||||
KtBinaryExpression::class.java,
|
KtBinaryExpression::class.java,
|
||||||
"Replace '==' with 'Arrays.equals'"
|
"Replace '==' with 'contentEquals'"
|
||||||
) {
|
) {
|
||||||
|
|
||||||
override fun applyTo(element: KtBinaryExpression, editor: Editor?) {
|
override fun applyTo(element: KtBinaryExpression, editor: Editor?) {
|
||||||
@@ -41,13 +38,9 @@ class ReplaceArrayEqualityOpWithArraysEqualsIntention : SelfTargetingOffsetIndep
|
|||||||
val right = element.right ?: return
|
val right = element.right ?: return
|
||||||
val left = element.left ?: return
|
val left = element.left ?: return
|
||||||
val factory = KtPsiFactory(project)
|
val factory = KtPsiFactory(project)
|
||||||
val ktFile = element.containingKtFile
|
|
||||||
ktFile.resolveImportReference(FqName("java.util.Arrays")).firstOrNull()?.let {
|
|
||||||
ImportInsertHelper.getInstance(project).importDescriptor(ktFile, it)
|
|
||||||
}
|
|
||||||
val template = buildString {
|
val template = buildString {
|
||||||
if (element.operationToken == KtTokens.EXCLEQ) append("!")
|
if (element.operationToken == KtTokens.EXCLEQ) append("!")
|
||||||
append("Arrays.equals($0, $1)")
|
append("$0.contentEquals($1)")
|
||||||
}
|
}
|
||||||
val expression = factory.createExpressionByPattern(template, left, right)
|
val expression = factory.createExpressionByPattern(template, left, right)
|
||||||
element.replace(expression)
|
element.replace(expression)
|
||||||
@@ -56,7 +49,7 @@ class ReplaceArrayEqualityOpWithArraysEqualsIntention : SelfTargetingOffsetIndep
|
|||||||
override fun isApplicableTo(element: KtBinaryExpression): Boolean {
|
override fun isApplicableTo(element: KtBinaryExpression): Boolean {
|
||||||
val operationToken = element.operationToken
|
val operationToken = element.operationToken
|
||||||
if (operationToken != KtTokens.EQEQ && operationToken != KtTokens.EXCLEQ) return false
|
if (operationToken != KtTokens.EQEQ && operationToken != KtTokens.EXCLEQ) return false
|
||||||
if (operationToken == KtTokens.EXCLEQ) text = "Replace '!=' with 'Arrays.equals'"
|
if (operationToken == KtTokens.EXCLEQ) text = "Replace '!=' with 'contentEquals'"
|
||||||
val right = element.right ?: return false
|
val right = element.right ?: return false
|
||||||
val left = element.left ?: return false
|
val left = element.left ?: return false
|
||||||
val rightResolvedCall = right.getResolvedCall(right.analyze()) ?: return false
|
val rightResolvedCall = right.getResolvedCall(right.analyze()) ?: return false
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '==' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '==' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = arrayOf("a", "b", "c")
|
val a = arrayOf("a", "b", "c")
|
||||||
val b = arrayOf("a", "b", "c")
|
val b = arrayOf("a", "b", "c")
|
||||||
|
|||||||
+2
-4
@@ -1,10 +1,8 @@
|
|||||||
import java.util.Arrays
|
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '==' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '==' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = arrayOf("a", "b", "c")
|
val a = arrayOf("a", "b", "c")
|
||||||
val b = arrayOf("a", "b", "c")
|
val b = arrayOf("a", "b", "c")
|
||||||
if (Arrays.equals(a, b)) {
|
if (a.contentEquals(b)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '!=' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '!=' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = arrayOf("a", "b", "c")
|
val a = arrayOf("a", "b", "c")
|
||||||
val b = arrayOf("a", "b", "c")
|
val b = arrayOf("a", "b", "c")
|
||||||
|
|||||||
+2
-4
@@ -1,10 +1,8 @@
|
|||||||
import java.util.Arrays
|
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '!=' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '!=' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = arrayOf("a", "b", "c")
|
val a = arrayOf("a", "b", "c")
|
||||||
val b = arrayOf("a", "b", "c")
|
val b = arrayOf("a", "b", "c")
|
||||||
if (!Arrays.equals(a, b)) {
|
if (!a.contentEquals(b)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '==' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '==' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = charArrayOf('a', 'b', 'c')
|
val a = charArrayOf('a', 'b', 'c')
|
||||||
val b = charArrayOf('a', 'b', 'c')
|
val b = charArrayOf('a', 'b', 'c')
|
||||||
|
|||||||
Vendored
+2
-4
@@ -1,10 +1,8 @@
|
|||||||
import java.util.Arrays
|
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// INTENTION_TEXT: Replace '==' with 'Arrays.equals'
|
// INTENTION_TEXT: Replace '==' with 'contentEquals'
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val a = charArrayOf('a', 'b', 'c')
|
val a = charArrayOf('a', 'b', 'c')
|
||||||
val b = charArrayOf('a', 'b', 'c')
|
val b = charArrayOf('a', 'b', 'c')
|
||||||
if (Arrays.equals(a, b)) {
|
if (a.contentEquals(b)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user