Postfix templates: remove only expression statements on expanding

(IDEA-187042)
This commit is contained in:
Alexander Zolotov
2018-02-21 20:32:17 +03:00
parent f034b5cd8b
commit 985ea1e4ba
4 changed files with 25 additions and 5 deletions
@@ -10,13 +10,12 @@ import com.intellij.openapi.util.Condition;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiExpressionStatement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLiteralExpression;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
import com.intellij.util.Function;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -139,10 +138,11 @@ public class JavaEditablePostfixTemplate extends EditablePostfixTemplate {
@NotNull
@Override
protected PsiElement getElementToRemove(@NotNull PsiElement element) {
if (element instanceof PsiLiteralExpression) {
return element;
PsiElement parent = element.getParent();
if (parent instanceof PsiExpressionStatement) {
return parent;
}
return ObjectUtils.notNull(element.getParent(), element);
return element;
}
@NotNull
@@ -0,0 +1,6 @@
public class Foo {
void m(boolean b) {
String s1 = "";
String s2 = s1.arg<caret>
}
}
@@ -0,0 +1,6 @@
public class Foo {
void m(boolean b) {
String s1 = "";
String s2 = functionCall(s1<caret>)
}
}
@@ -6,6 +6,14 @@ import org.jetbrains.annotations.NotNull;
public class ArgumentPostfixTemplateTest extends PostfixTemplateTestCase {
public void testSimple() {
doArgTest();
}
public void testLocalVariable() {
doArgTest();
}
private void doArgTest() {
TemplateManagerImpl.setTemplateTesting(myFixture.getProject(), getTestRootDisposable());
myFixture.configureByFile(getTestName(true) + ".java");
myFixture.type("\tfunctionCall\t");