From 3b748a1d3d94e16e89fe078e69ee391dc9ac60c4 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Wed, 3 Apr 2013 15:43:19 +0400 Subject: [PATCH] IDEA-104469 Groovy: remove line feed from method call if necessary during removing parameters --- .../statements/arguments/GrArgumentListImpl.java | 12 ++++++++++-- .../changeSignature/ChangeSignatureTest.groovy | 4 ++++ .../changeSignature/LineFeedInCommandArgs.groovy | 6 ++++++ .../LineFeedInCommandArgs_after.groovy | 5 +++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs_after.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentListImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentListImpl.java index 7229bb762ae6..0fccca80fbfe 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentListImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/arguments/GrArgumentListImpl.java @@ -186,7 +186,7 @@ public class GrArgumentListImpl extends GroovyPsiElementImpl implements GrArgume } @Override - public PsiElement addAfter(@NotNull PsiElement element, PsiElement anchor) throws IncorrectOperationException { + public PsiElement addAfter(@NotNull PsiElement element, @Nullable PsiElement anchor) throws IncorrectOperationException { if (element instanceof GrExpression || element instanceof GrNamedArgument) { final boolean insertComma = getAllArguments().length != 0; @@ -215,12 +215,20 @@ public class GrArgumentListImpl extends GroovyPsiElementImpl implements GrArgume if (element instanceof GrExpression || element instanceof GrNamedArgument) { ASTNode prev = TreeUtil.skipElementsBack(child.getTreePrev(), TokenSets.WHITE_SPACES_OR_COMMENTS); if (prev != null && prev.getElementType() == mCOMMA) { + final ASTNode pprev = prev.getTreePrev(); + if (pprev != null && TokenSets.WHITE_SPACES_SET.contains(pprev.getElementType())) { + super.deleteChildInternal(pprev); + } super.deleteChildInternal(prev); } else { ASTNode next = TreeUtil.skipElements(child.getTreeNext(), TokenSets.WHITE_SPACES_OR_COMMENTS); if (next != null && next.getElementType() == mCOMMA) { - deleteChildInternal(next); + final ASTNode nnext = next.getTreeNext(); + if (nnext != null && TokenSets.WHITE_SPACES_SET.contains(nnext.getElementType())) { + super.deleteChildInternal(nnext); + } + super.deleteChildInternal(next); } } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.groovy index c832e5444164..f78896ce0f3a 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.groovy @@ -253,6 +253,10 @@ public class ChangeSignatureTest extends ChangeSignatureTestCase { doTest(null, 'a\'bc', null, [], [], false) } + void testLineFeedInCommandArgs() { + doTest(new SimpleInfo(1)) + } + private PsiType createType(String typeText) { return JavaPsiFacade.getElementFactory(project).createTypeByFQClassName(typeText, GlobalSearchScope.allScope(project)); diff --git a/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs.groovy b/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs.groovy new file mode 100644 index 000000000000..7862d3897d7b --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs.groovy @@ -0,0 +1,6 @@ +def foo(def a, def b) { + print b +} + +foo 'abc', + 'cde' \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs_after.groovy new file mode 100644 index 000000000000..0032f494de26 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/LineFeedInCommandArgs_after.groovy @@ -0,0 +1,5 @@ +def foo(def b) { + print b +} + +foo 'cde' \ No newline at end of file