Fix unnecessary parenthesis around 'this' in refactorings

Operator priority calculation for 'this' expressions was incorrect in
JetPsiUtil.getPriority(): it would return a very low value for
a JetThisExpression, causing the IDE to report that parenthesis
are necessary in an expression like '(this)[1]'.

Fix this by making JetThisExpression not implement
JetStatementExpression by removing the implements clause from
JetLabelQualifiedInstanceExpression and adding it to all other
subclasses of JetLabelQualifiedInstanceExpression.

Fixes KT-4513.
This commit is contained in:
Tuomas Tynkkynen
2014-02-05 16:33:34 +02:00
committed by Nikolay Krasko
parent 85c46019d3
commit 9ce40cd17b
5 changed files with 19 additions and 3 deletions
@@ -20,8 +20,7 @@ import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetNodeTypes;
public abstract class JetLabelQualifiedInstanceExpression extends JetLabelQualifiedExpression
implements JetStatementExpression {
public abstract class JetLabelQualifiedInstanceExpression extends JetLabelQualifiedExpression {
public JetLabelQualifiedInstanceExpression(@NotNull ASTNode node) {
super(node);
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
public class JetSuperExpression extends JetLabelQualifiedInstanceExpression {
public class JetSuperExpression extends JetLabelQualifiedInstanceExpression implements JetStatementExpression {
public JetSuperExpression(@NotNull ASTNode node) {
super(node);
@@ -0,0 +1,6 @@
class C() {
fun get(i: Int) = i + 1
// KT-4513: Unnecessary parenthesis around 'this'
val foo = (th<caret>is)[41]
}
@@ -0,0 +1,6 @@
class C() {
fun get(i: Int) = i + 1
// KT-4513: Unnecessary parenthesis around 'this'
val foo = this[41]
}
@@ -1176,6 +1176,11 @@ public class CodeTransformationTestGenerated extends AbstractCodeTransformationT
doTestRemoveUnnecessaryParentheses("idea/testData/intentions/removeUnnecessaryParentheses/unnecessaryParentheses7.kt");
}
@TestMetadata("unnecessaryParentheses8.kt")
public void testUnnecessaryParentheses8() throws Exception {
doTestRemoveUnnecessaryParentheses("idea/testData/intentions/removeUnnecessaryParentheses/unnecessaryParentheses8.kt");
}
}
public static Test suite() {