Quick-Fixes: Drop unnecessary parentheses when simplifying cast expressions

#KT-6501 Fixed
This commit is contained in:
Alexey Sedunov
2015-03-13 20:54:05 +03:00
parent 71a5e09a0b
commit a2162810ff
4 changed files with 32 additions and 8 deletions
@@ -18,14 +18,12 @@ package org.jetbrains.kotlin.idea.quickfix;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.diagnostics.Diagnostic;
import org.jetbrains.kotlin.idea.JetBundle; import org.jetbrains.kotlin.idea.JetBundle;
import org.jetbrains.kotlin.psi.JetBinaryExpression; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.psi.JetBinaryExpressionWithTypeRHS;
import org.jetbrains.kotlin.psi.JetExpression;
import org.jetbrains.kotlin.psi.JetFile;
public class RemoveRightPartOfBinaryExpressionFix<T extends JetExpression> extends JetIntentionAction<T> { public class RemoveRightPartOfBinaryExpressionFix<T extends JetExpression> extends JetIntentionAction<T> {
private final String message; private final String message;
@@ -47,13 +45,19 @@ public class RemoveRightPartOfBinaryExpressionFix<T extends JetExpression> exten
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
PsiElement newElement = null;
if (element instanceof JetBinaryExpression) { if (element instanceof JetBinaryExpression) {
JetBinaryExpression newElement = (JetBinaryExpression) element.copy(); //noinspection ConstantConditions
element.replace(newElement.getLeft()); newElement = element.replace(((JetBinaryExpression) element.copy()).getLeft());
} }
else if (element instanceof JetBinaryExpressionWithTypeRHS) { else if (element instanceof JetBinaryExpressionWithTypeRHS) {
JetBinaryExpressionWithTypeRHS newElement = (JetBinaryExpressionWithTypeRHS) element.copy(); newElement = element.replace(((JetBinaryExpressionWithTypeRHS) element.copy()).getLeft());
element.replace(newElement.getLeft()); }
PsiElement parent = newElement != null ? newElement.getParent() : null;
if (parent instanceof JetParenthesizedExpression && JetPsiUtil.areParenthesesUseless((JetParenthesizedExpression) parent)) {
parent.replace(newElement);
} }
} }
@@ -0,0 +1,7 @@
// "Remove cast" "true"
fun test(x: Any): Int {
if (x is String) {
return x.length()
}
return -1
}
@@ -0,0 +1,7 @@
// "Remove cast" "true"
fun test(x: Any): Int {
if (x is String) {
return (x <caret>as String).length()
}
return -1
}
@@ -2831,6 +2831,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName); doTest(fileName);
} }
@TestMetadata("beforeRemoveUselessCastInParens.kt")
public void testRemoveUselessCastInParens() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/expressions/beforeRemoveUselessCastInParens.kt");
doTest(fileName);
}
@TestMetadata("beforeRemoveUselessCastUnderSmartCast.kt") @TestMetadata("beforeRemoveUselessCastUnderSmartCast.kt")
public void testRemoveUselessCastUnderSmartCast() throws Exception { public void testRemoveUselessCastUnderSmartCast() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/expressions/beforeRemoveUselessCastUnderSmartCast.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/expressions/beforeRemoveUselessCastUnderSmartCast.kt");