From f1dc3f2d876a07934db4fbd651a8f3c48576eb3e Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Fri, 12 Jul 2013 18:58:06 +0400 Subject: [PATCH] IDEA-110369 Autocompletion in GString with two extrapolated strings - $ is deleted --- .../GroovyCompletionContributor.java | 6 ++++ .../completion/GroovyCompletionTest.groovy | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java index 2ca5c7e7fd29..de8dba803249 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java @@ -659,6 +659,12 @@ public class GroovyCompletionContributor extends CompletionContributor { if (identifier != null) { context.setDummyIdentifier(identifier); } + + //don't eat $ from gstrings when completing previous injection ref. see IDEA-110369 + PsiElement position = context.getFile().findElementAt(context.getStartOffset()); + if (position!= null && position.getNode().getElementType() == mDOLLAR) { + context.getOffsetMap().addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, context.getStartOffset()); + } } private String getIdentifier(CompletionInitializationContext context) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy index a69e6d25a5b1..8678dcb924f1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -1823,4 +1823,36 @@ def foo(Util util) { } ''', CompletionType.SMART) } + + void testDollarInGString() { + doCompletionTest('''\ +class Autocompletion { + def reportDir = '/' + def reportDirectory = '/' + def fileName = "$reportD${File.separator}" +} +''', '''\ +class Autocompletion { + def reportDir = '/' + def reportDirectory = '/' + def fileName = "$reportDir${File.separator}" +} +''', '\t', CompletionType.BASIC) + } + + void testDollarInGString2() { + doCompletionTest('''\ +class Autocompletion { + def reportDir = '/' + def fileName = "$reportD${File.separator}" +} +''', '''\ +class Autocompletion { + def reportDir = '/' + def fileName = "$reportDir${File.separator}" +} +''', '\t', CompletionType.BASIC) + } + + } \ No newline at end of file