mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
groovy: don't suggest classes where nothing except map key (string literal) is expected
This commit is contained in:
+2
-1
@@ -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,
|
||||
|
||||
+25
-14
@@ -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<CompletionParamet
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull CompletionResultSet result) {
|
||||
PsiElement mapOrArgumentList;
|
||||
|
||||
PsiElement parent = parameters.getPosition().getParent();
|
||||
if (parent instanceof GrReferenceExpression) {
|
||||
if (((GrReferenceExpression)parent).getQualifier() != null) return;
|
||||
mapOrArgumentList = parent.getParent();
|
||||
}
|
||||
else {
|
||||
mapOrArgumentList = parent.getParent().getParent();
|
||||
PsiElement mapOrArgumentList = findMapOrArgumentList(parameters);
|
||||
if (mapOrArgumentList == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mapOrArgumentList instanceof GrListOrMap) {
|
||||
if (((GrListOrMap)mapOrArgumentList).getNamedArguments().length > 0) {
|
||||
result.stopHere();
|
||||
}
|
||||
if (isMapKeyCompletion(parameters)) {
|
||||
result.stopHere();
|
||||
}
|
||||
|
||||
Map<String, NamedArgumentDescriptor> map = calcNamedArgumentsForCall(mapOrArgumentList);
|
||||
@@ -113,6 +106,24 @@ class MapArgumentCompletionProvider extends CompletionProvider<CompletionParamet
|
||||
|
||||
}
|
||||
|
||||
public static boolean isMapKeyCompletion(CompletionParameters parameters) {
|
||||
PsiElement mapOrArgumentList = findMapOrArgumentList(parameters);
|
||||
return mapOrArgumentList instanceof GrListOrMap && ((GrListOrMap)mapOrArgumentList).getNamedArguments().length > 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<String, NamedArgumentDescriptor> findOtherNamedArgumentsInFile(PsiElement mapOrArgumentList) {
|
||||
final Map<String, NamedArgumentDescriptor> map = new HashMap<String, NamedArgumentDescriptor>();
|
||||
mapOrArgumentList.getContainingFile().accept(new PsiRecursiveElementWalkingVisitor() {
|
||||
@@ -145,7 +156,7 @@ class MapArgumentCompletionProvider extends CompletionProvider<CompletionParamet
|
||||
return GrNamedArgument.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
private static Map<String, NamedArgumentDescriptor> calcNamedArgumentsForCall(PsiElement mapOrArgumentList) {
|
||||
private static Map<String, NamedArgumentDescriptor> calcNamedArgumentsForCall(@NotNull PsiElement mapOrArgumentList) {
|
||||
PsiElement argumentList = mapOrArgumentList instanceof GrArgumentList ? mapOrArgumentList : mapOrArgumentList.getParent();
|
||||
if (argumentList instanceof GrArgumentList) {
|
||||
if (mapOrArgumentList instanceof GrListOrMap) {
|
||||
|
||||
+5
@@ -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'
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
[foo6:'aaa', d<caret>]
|
||||
Reference in New Issue
Block a user