extract variable: ensure replace all occurrences survive parenthesis around value (IDEA-122041)

This commit is contained in:
Anna Kozlova
2014-04-16 16:42:07 +02:00
parent 51f15b7ea4
commit 9fda587640
6 changed files with 60 additions and 7 deletions
@@ -0,0 +1,13 @@
class Test {
Test foo(long l) {
return this;
}
{
Test t = new Test()
.foo(-(5<caret>L))
.foo(7L)
.foo(-(5L));
}
}
@@ -0,0 +1,15 @@
class Test {
Test foo(long l) {
return this;
}
public static final long LONG = 5L;
{
Test t = new Test()
.foo(-LONG)
.foo(7L)
.foo(-LONG);
}
}
@@ -42,7 +42,7 @@ public abstract class AbstractJavaInplaceIntroduceTest extends AbstractInplaceIn
}
@Nullable
protected static PsiExpression getExpressionFromEditor() {
protected PsiExpression getExpressionFromEditor() {
final PsiExpression expression = PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiExpression.class);
if (expression instanceof PsiReferenceExpression && expression.getParent() instanceof PsiMethodCallExpression) {
return (PsiExpression)expression.getParent();
@@ -19,10 +19,13 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pass;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiLiteralExpression;
import com.intellij.psi.PsiLocalVariable;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer;
import com.intellij.refactoring.introduceField.IntroduceConstantHandler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* User: anna
@@ -43,6 +46,28 @@ public class InplaceIntroduceConstantTest extends AbstractJavaInplaceIntroduceTe
});
}
@Nullable
@Override
protected PsiExpression getExpressionFromEditor() {
final PsiExpression expression = super.getExpressionFromEditor();
if (expression != null) {
return expression;
}
final PsiExpression expr = PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiExpression.class);
return expr instanceof PsiLiteralExpression ? expr : null;
}
public void testReplaceAllInsideParenthesized() throws Exception {
doTest(new Pass<AbstractInplaceIntroducer>() {
@Override
public void pass(AbstractInplaceIntroducer inplaceIntroduceFieldPopup) {
inplaceIntroduceFieldPopup.setReplaceAllOccurrences(true);
}
});
}
public void testReplaceAllWithClassRefType() throws Exception {
doTest(new Pass<AbstractInplaceIntroducer>() {