diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java index ef74cc4702e9..957e080bd9f0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java @@ -30,7 +30,8 @@ public class GroovyNoVariantsDelegator extends NoVariantsDelegator { if (parameters.getCompletionType() == CompletionType.BASIC && parameters.getInvocationCount() <= 1 && JavaCompletionContributor.mayStartClassName(result, false) && - GroovyCompletionContributor.isClassNamePossible(parameters.getPosition())) { + GroovyCompletionContributor.isClassNamePossible(parameters.getPosition()) && + !MapArgumentCompletionProvider.isMapKeyCompletion(parameters)) { final ClassByNameMerger merger = new ClassByNameMerger(parameters.getInvocationCount() == 0, result); GroovyCompletionContributor.addAllClasses(parameters, result, diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/MapArgumentCompletionProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/MapArgumentCompletionProvider.java index 96379c531464..84b6b2808589 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/MapArgumentCompletionProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/MapArgumentCompletionProvider.java @@ -23,6 +23,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiRecursiveElementWalkingVisitor; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyIcons; import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider; import org.jetbrains.plugins.groovy.extensions.NamedArgumentDescriptor; @@ -70,21 +71,13 @@ class MapArgumentCompletionProvider extends CompletionProvider 0) { - result.stopHere(); - } + if (isMapKeyCompletion(parameters)) { + result.stopHere(); } Map map = calcNamedArgumentsForCall(mapOrArgumentList); @@ -113,6 +106,24 @@ class MapArgumentCompletionProvider extends CompletionProvider 0; + } + + @Nullable + private static PsiElement findMapOrArgumentList(CompletionParameters parameters) { + PsiElement parent = parameters.getPosition().getParent(); + if (parent instanceof GrReferenceExpression) { + if (((GrReferenceExpression)parent).getQualifier() != null) return null; + return parent.getParent(); + } + if (parent == null || parent.getParent() == null) { + return null; + } + return parent.getParent().getParent(); + } + private static Map findOtherNamedArgumentsInFile(PsiElement mapOrArgumentList) { final Map map = new HashMap(); mapOrArgumentList.getContainingFile().accept(new PsiRecursiveElementWalkingVisitor() { @@ -145,7 +156,7 @@ class MapArgumentCompletionProvider extends CompletionProvider calcNamedArgumentsForCall(PsiElement mapOrArgumentList) { + private static Map calcNamedArgumentsForCall(@NotNull PsiElement mapOrArgumentList) { PsiElement argumentList = mapOrArgumentList instanceof GrArgumentList ? mapOrArgumentList : mapOrArgumentList.getParent(); if (argumentList instanceof GrArgumentList) { if (mapOrArgumentList instanceof GrListOrMap) { 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 23b18f2a4c25..5048a4c08756 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -840,6 +840,11 @@ return foo()""" doVariantableTest 'foo1', 'foo3', 'foo4', 'Foo5', 'Foo7' } + public void testNoClassesAsMapKeys() throws Exception { + CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE + doVariantableTest() + } + public void testNamedArgsUsedInFile() throws Exception { myFixture.configureByFile(getTestName(false) + ".groovy"); doVariantableTest 'false', 'foo2', 'float', 'foo1', 'foo3', 'foo4', 'foo5' diff --git a/plugins/groovy/testdata/groovy/completion/NoClassesAsMapKeys.groovy b/plugins/groovy/testdata/groovy/completion/NoClassesAsMapKeys.groovy new file mode 100644 index 000000000000..6bff03f999a8 --- /dev/null +++ b/plugins/groovy/testdata/groovy/completion/NoClassesAsMapKeys.groovy @@ -0,0 +1 @@ +[foo6:'aaa', d] \ No newline at end of file