mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
smart completion is not smart enough to require that many abstractions
This commit is contained in:
+22
-31
@@ -31,7 +31,6 @@ import com.intellij.psi.scope.util.PsiScopesUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -39,16 +38,15 @@ import java.util.Map;
|
||||
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiClass;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
|
||||
import static com.intellij.patterns.StandardPatterns.not;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class BasicExpressionCompletionContributor extends ExpressionSmartCompletionContributor{
|
||||
public class BasicExpressionCompletionContributor {
|
||||
public static final ElementPattern<PsiElement> AFTER_DOT = psiElement().afterLeaf(".");
|
||||
|
||||
private static void addKeyword(final CompletionResultSet result, final PsiElement element, final String s) {
|
||||
result.addElement(createKeywordLookupItem(element, s));
|
||||
private static void addKeyword(final Consumer<LookupElement> result, final PsiElement element, final String s) {
|
||||
result.consume(createKeywordLookupItem(element, s));
|
||||
}
|
||||
|
||||
public static LookupElement createKeywordLookupItem(final PsiElement element, final String s) {
|
||||
@@ -61,31 +59,29 @@ public class BasicExpressionCompletionContributor extends ExpressionSmartComplet
|
||||
}
|
||||
}
|
||||
|
||||
public static void fillCompletionVariants(JavaSmartCompletionParameters parameters,
|
||||
final Consumer<LookupElement> result,
|
||||
PrefixMatcher matcher) {
|
||||
final PsiElement element = parameters.getPosition();
|
||||
if (PsiJavaPatterns.psiElement().afterLeaf(
|
||||
PsiJavaPatterns.psiElement().withText(".").afterLeaf(
|
||||
PsiJavaPatterns.psiElement().withParent(
|
||||
PsiJavaPatterns.psiElement().referencing(psiClass())))).accepts(element)) {
|
||||
addKeyword(result, element, PsiKeyword.CLASS);
|
||||
addKeyword(result, element, PsiKeyword.THIS);
|
||||
|
||||
public BasicExpressionCompletionContributor() {
|
||||
extend(PsiJavaPatterns.psiElement().afterLeaf(
|
||||
PsiJavaPatterns.psiElement().withText(".").afterLeaf(
|
||||
PsiJavaPatterns.psiElement().withParent(
|
||||
PsiJavaPatterns.psiElement().referencing(psiClass())))), new CompletionProvider<JavaSmartCompletionParameters>() {
|
||||
public void addCompletions(@NotNull final JavaSmartCompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement element = parameters.getPosition();
|
||||
addKeyword(result, element, PsiKeyword.CLASS);
|
||||
addKeyword(result, element, PsiKeyword.THIS);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
if (!AFTER_DOT.accepts(element)) {
|
||||
CollectionsUtilityMethodsProvider.addCompletions(parameters, result);
|
||||
ClassLiteralGetter.addCompletions(parameters, result, matcher);
|
||||
|
||||
extend(not(AFTER_DOT), new CollectionsUtilityMethodsProvider());
|
||||
extend(not(AFTER_DOT), new ClassLiteralGetter());
|
||||
|
||||
extend(not(AFTER_DOT), new CompletionProvider<JavaSmartCompletionParameters>() {
|
||||
protected void addCompletions(@NotNull final JavaSmartCompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiType expectedType = parameters.getExpectedType();
|
||||
|
||||
for (final TemplateImpl template : TemplateSettings.getInstance().getTemplates()) {
|
||||
if (!template.isDeactivated() && template.getTemplateContext().isEnabled(new SmartCompletionContextType())) {
|
||||
result.addElement(new SmartCompletionTemplateItem(template, position));
|
||||
result.consume(new SmartCompletionTemplateItem(template, position));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,17 +96,12 @@ public class BasicExpressionCompletionContributor extends ExpressionSmartComplet
|
||||
}
|
||||
|
||||
for (final PsiExpression expression : ThisGetter.getThisExpressionVariants(position)) {
|
||||
result.addElement(new ExpressionLookupItem(expression));
|
||||
result.consume(new ExpressionLookupItem(expression));
|
||||
}
|
||||
}
|
||||
|
||||
processDataflowExpressionTypes(position, expectedType, result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
public void consume(LookupElement decorator) {
|
||||
result.addElement(decorator);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
processDataflowExpressionTypes(position, expectedType, matcher, result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+13
-11
@@ -15,19 +15,21 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupItem;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.psi.*;
|
||||
import static com.intellij.psi.CommonClassNames.*;
|
||||
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static com.intellij.psi.CommonClassNames.*;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
class CollectionsUtilityMethodsProvider extends CompletionProvider<JavaSmartCompletionParameters> {
|
||||
public void addCompletions(@NotNull final JavaSmartCompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
class CollectionsUtilityMethodsProvider {
|
||||
public static void addCompletions(@NotNull final JavaSmartCompletionParameters parameters,
|
||||
@NotNull final Consumer<LookupElement> result) {
|
||||
final PsiElement element = parameters.getPosition();
|
||||
|
||||
final PsiElement parent = element.getParent();
|
||||
@@ -63,7 +65,7 @@ class CollectionsUtilityMethodsProvider extends CompletionProvider<JavaSmartComp
|
||||
|
||||
}
|
||||
|
||||
private static void addCollectionMethod(final CompletionResultSet result, final PsiType expectedType,
|
||||
private static void addCollectionMethod(final Consumer<LookupElement> result, final PsiType expectedType,
|
||||
final PsiType defaultType, final String baseClassName,
|
||||
@NonNls final String method, @NotNull final PsiClass collectionsClass) {
|
||||
if (isClassType(expectedType, baseClassName) || isClassType(expectedType, JAVA_UTIL_COLLECTION)) {
|
||||
@@ -73,7 +75,7 @@ class CollectionsUtilityMethodsProvider extends CompletionProvider<JavaSmartComp
|
||||
}
|
||||
}
|
||||
|
||||
private static void addMethodItem(CompletionResultSet result, PsiType expectedType, String methodName, PsiClass containingClass) {
|
||||
private static void addMethodItem(Consumer<LookupElement> result, PsiType expectedType, String methodName, PsiClass containingClass) {
|
||||
final PsiMethod[] methods = containingClass.findMethodsByName(methodName, false);
|
||||
if (methods.length == 0) {
|
||||
return;
|
||||
@@ -83,7 +85,7 @@ class CollectionsUtilityMethodsProvider extends CompletionProvider<JavaSmartComp
|
||||
final JavaMethodCallElement item = new JavaMethodCallElement(method);
|
||||
JavaCompletionUtil.qualify(item).setAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE);
|
||||
item.setInferenceSubstitutor(SmartCompletionDecorator.calculateMethodReturnTypeSubstitutor(method, expectedType));
|
||||
result.addElement(item);
|
||||
result.consume(item);
|
||||
}
|
||||
|
||||
private static boolean isClassType(final PsiType type, final String className) {
|
||||
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class ExpressionSmartCompletionContributor extends AbstractCompletionContributor<JavaSmartCompletionParameters> {
|
||||
|
||||
private final List<Pair<ElementPattern<? extends PsiElement>, CompletionProvider<JavaSmartCompletionParameters>>> myList =
|
||||
new ArrayList<Pair<ElementPattern<? extends PsiElement>, CompletionProvider<JavaSmartCompletionParameters>>>();
|
||||
|
||||
public final void extend(final ElementPattern<? extends PsiElement> place, CompletionProvider<JavaSmartCompletionParameters> provider) {
|
||||
myList.add(new Pair<ElementPattern<? extends PsiElement>, CompletionProvider<JavaSmartCompletionParameters>>(place, provider));
|
||||
}
|
||||
|
||||
public void fillCompletionVariants(final JavaSmartCompletionParameters parameters, CompletionResultSet result) {
|
||||
for (final Pair<ElementPattern<? extends PsiElement>, CompletionProvider<JavaSmartCompletionParameters>> pair : myList) {
|
||||
final ProcessingContext context = new ProcessingContext();
|
||||
if (pair.first.accepts(parameters.getPosition(), context)) {
|
||||
pair.second.addCompletionVariants(parameters, context, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -39,6 +39,7 @@ import com.intellij.psi.jsp.JspElementType;
|
||||
import com.intellij.psi.scope.ElementClassFilter;
|
||||
import com.intellij.psi.templateLanguages.OuterLanguageElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
@@ -550,7 +551,7 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillCompletions(CompletionParameters parameters, CompletionResultSet result) {
|
||||
public void fillCompletions(CompletionParameters parameters, final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
if (PsiTreeUtil.getParentOfType(position, PsiComment.class, false) != null) {
|
||||
return;
|
||||
@@ -631,7 +632,12 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
!(position.getParent() instanceof PsiLiteralExpression) &&
|
||||
!(position.getParent().getParent() instanceof PsiSwitchLabelStatement)) {
|
||||
for (final ExpectedTypeInfo info : JavaSmartCompletionContributor.getExpectedTypes(parameters)) {
|
||||
MembersGetter.addMembers(position, info.getDefaultType(), result);
|
||||
MembersGetter.addMembers(position, info.getDefaultType(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
result.addElement(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -197,9 +197,9 @@ public class JavaSmartCompletionContributor extends CompletionContributor {
|
||||
final JavaSmartCompletionParameters parameters = new JavaSmartCompletionParameters(params, info);
|
||||
final PsiType type = info.getType();
|
||||
|
||||
final CompletionService service = CompletionService.getCompletionService();
|
||||
new BasicExpressionCompletionContributor().fillCompletionVariants(parameters, service.createResultSet(parameters, new Consumer<LookupElement>() {
|
||||
public void consume(final LookupElement lookupElement) {
|
||||
BasicExpressionCompletionContributor.fillCompletionVariants(parameters, new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement lookupElement) {
|
||||
final TypedLookupItem typed = lookupElement.as(TypedLookupItem.CLASS_CONDITION_KEY);
|
||||
if (typed != null) {
|
||||
final PsiType psiType = typed.getType();
|
||||
@@ -208,12 +208,12 @@ public class JavaSmartCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
}
|
||||
}
|
||||
}, JavaSmartCompletionContributor.this));
|
||||
ReferenceExpressionCompletionContributor.fillCompletionVariants(parameters, service.createResultSet(parameters, new Consumer<LookupElement>() {
|
||||
}, result.getPrefixMatcher());
|
||||
ReferenceExpressionCompletionContributor.fillCompletionVariants(parameters, new Consumer<LookupElement>() {
|
||||
public void consume(final LookupElement lookupElement) {
|
||||
result.addElement(decorate(lookupElement, _infos));
|
||||
}
|
||||
}, JavaSmartCompletionContributor.this));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+14
-14
@@ -104,7 +104,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
return TrueFilter.INSTANCE;
|
||||
}
|
||||
|
||||
public static void fillCompletionVariants(final JavaSmartCompletionParameters parameters, final CompletionResultSet result) {
|
||||
public static void fillCompletionVariants(final JavaSmartCompletionParameters parameters, final Consumer<LookupElement> result) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
final PsiElement element = parameters.getPosition();
|
||||
@@ -115,7 +115,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
if (reference != null) {
|
||||
final ElementFilter filter = getReferenceFilter(element, false);
|
||||
for (final LookupElement item : completeFinalReference(element, reference, filter, parameters)) {
|
||||
result.addElement(item);
|
||||
result.consume(item);
|
||||
}
|
||||
|
||||
final boolean secondTime = parameters.getInvocationCount() >= 2;
|
||||
@@ -180,7 +180,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
|
||||
private static void addSingleArrayElementAccess(PsiElement element, LookupElement item, JavaSmartCompletionParameters parameters,
|
||||
CompletionResultSet result) {
|
||||
Consumer<LookupElement> result) {
|
||||
if (item.getObject() instanceof PsiLocalVariable) {
|
||||
final PsiLocalVariable variable = (PsiLocalVariable)item.getObject();
|
||||
final PsiType type = variable.getType();
|
||||
@@ -192,7 +192,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
if (dimensions.length == 1 && "1".equals(dimensions[0].getText()) && newExpression.getArrayInitializer() == null) {
|
||||
final String text = variable.getName() + "[0]";
|
||||
final PsiExpression conversion = createExpression(text, element);
|
||||
result.addElement(new ExpressionLookupItem(conversion).setIcon(variable.getIcon(Iconable.ICON_FLAG_VISIBILITY)));
|
||||
result.consume(new ExpressionLookupItem(conversion).setIcon(variable.getIcon(Iconable.ICON_FLAG_VISIBILITY)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -204,7 +204,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
|
||||
private static void addSecondCompletionVariants(PsiElement element, PsiReference reference, LookupElement baseItem,
|
||||
JavaSmartCompletionParameters parameters, CompletionResultSet result) {
|
||||
JavaSmartCompletionParameters parameters, Consumer<LookupElement> result) {
|
||||
final Object object = baseItem.getObject();
|
||||
|
||||
try {
|
||||
@@ -236,7 +236,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
|
||||
private static void addArrayMemberAccessors(final PsiElement element, final String prefix, final PsiType itemType,
|
||||
final PsiElement qualifier, final CompletionResultSet result, PsiModifierListOwner object,
|
||||
final PsiElement qualifier, final Consumer<LookupElement> result, PsiModifierListOwner object,
|
||||
final PsiType expectedType)
|
||||
throws IncorrectOperationException {
|
||||
if (itemType instanceof PsiArrayType && expectedType.isAssignableFrom(((PsiArrayType)itemType).getComponentType())) {
|
||||
@@ -262,7 +262,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
editor.getCaretModel().moveToOffset(tailOffset + 1 + callSpace.length());
|
||||
}
|
||||
});
|
||||
result.addElement(item);
|
||||
result.consume(item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void addArraysAsListConversions(final PsiElement element, final String prefix, final PsiType itemType, final CompletionResultSet result,
|
||||
private static void addArraysAsListConversions(final PsiElement element, final String prefix, final PsiType itemType, final Consumer<LookupElement> result,
|
||||
@Nullable PsiElement qualifier,
|
||||
final PsiType expectedType) throws IncorrectOperationException {
|
||||
PsiType componentType = PsiUtil.extractIterableTypeParameter(expectedType, true);
|
||||
@@ -321,11 +321,11 @@ public class ReferenceExpressionCompletionContributor {
|
||||
PostprocessReformattingAspect.getInstance(project).doPostponedFormatting();
|
||||
}
|
||||
});
|
||||
result.addElement(item);
|
||||
result.consume(item);
|
||||
}
|
||||
|
||||
private static void addToArrayConversions(final PsiElement element, final Object object, final String prefix, final PsiType itemType,
|
||||
final CompletionResultSet result, @Nullable final PsiElement qualifier,
|
||||
final Consumer<LookupElement> result, @Nullable final PsiElement qualifier,
|
||||
final PsiType expectedType) {
|
||||
final String callSpace = getSpace(CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES);
|
||||
final PsiType componentType = PsiUtil.extractIterableTypeParameter(itemType, true);
|
||||
@@ -380,7 +380,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
|
||||
private static void addChainedCallVariants(final PsiElement place, LookupElement qualifierItem,
|
||||
final CompletionResultSet result,
|
||||
final Consumer<LookupElement> result,
|
||||
PsiType qualifierType,
|
||||
final PsiType expectedType, JavaSmartCompletionParameters parameters) throws IncorrectOperationException {
|
||||
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(place.getProject()).getElementFactory();
|
||||
@@ -404,7 +404,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
final ElementFilter filter = getReferenceFilter(place, true);
|
||||
for (final LookupElement item : completeFinalReference(place, mockRef, filter, parameters)) {
|
||||
if (shoudChain(place, varType, expectedType, item)) {
|
||||
result.addElement(JavaChainLookupElement.chainElements(qualifierItem, item));
|
||||
result.consume(JavaChainLookupElement.chainElements(qualifierItem, item));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -454,7 +454,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void addToArrayConversion(final PsiElement element, final String prefix, @NonNls final String expressionString, @NonNls String presentableString, final CompletionResultSet result, PsiElement qualifier) {
|
||||
private static void addToArrayConversion(final PsiElement element, final String prefix, @NonNls final String expressionString, @NonNls String presentableString, final Consumer<LookupElement> result, PsiElement qualifier) {
|
||||
final boolean callSpace = CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES;
|
||||
final PsiExpression conversion;
|
||||
try {
|
||||
@@ -490,7 +490,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
PostprocessReformattingAspect.getInstance(project).doPostponedFormatting();
|
||||
}
|
||||
});
|
||||
result.addElement(item);
|
||||
result.consume(item);
|
||||
}
|
||||
|
||||
private static boolean isEmptyArrayInitializer(@Nullable PsiElement element) {
|
||||
|
||||
@@ -16,30 +16,26 @@
|
||||
package com.intellij.psi.filters.getters;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightUtil;
|
||||
import com.intellij.codeInsight.completion.CompletionProvider;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.JavaSmartCompletionParameters;
|
||||
import com.intellij.codeInsight.completion.PrefixMatcher;
|
||||
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionParameters> {
|
||||
public class ClassLiteralGetter {
|
||||
private static final Logger LOG = Logger.getInstance("com.intellij.psi.filters.getters.ClassLiteralGetter");
|
||||
|
||||
@Override
|
||||
protected void addCompletions(@NotNull final JavaSmartCompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull CompletionResultSet result) {
|
||||
public static void addCompletions(@NotNull final JavaSmartCompletionParameters parameters,
|
||||
@NotNull Consumer<LookupElement> result, final PrefixMatcher matcher) {
|
||||
|
||||
final PrefixMatcher matcher = result.getPrefixMatcher();
|
||||
final Condition<String> shortNameCondition = new Condition<String>() {
|
||||
public boolean value(String s) {
|
||||
return matcher.prefixMatches(s);
|
||||
@@ -61,7 +57,7 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
PsiFile file = parameters.getPosition().getContainingFile();
|
||||
addClassLiteralLookupElement(classParameter, result, file);
|
||||
if (addInheritors) {
|
||||
addInheritorClassLiterals(file, shortNameCondition, classParameter, result);
|
||||
addInheritorClassLiterals(file, shortNameCondition, classParameter, result, matcher);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -69,9 +65,9 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
private static void addInheritorClassLiterals(PsiFile context,
|
||||
Condition<String> shortNameCondition,
|
||||
final PsiType classParameter,
|
||||
CompletionResultSet result) {
|
||||
Consumer<LookupElement> result, PrefixMatcher matcher) {
|
||||
final String canonicalText = classParameter.getCanonicalText();
|
||||
if (CommonClassNames.JAVA_LANG_OBJECT.equals(canonicalText) && StringUtil.isEmpty(result.getPrefixMatcher().getPrefix())) {
|
||||
if (CommonClassNames.JAVA_LANG_OBJECT.equals(canonicalText) && StringUtil.isEmpty(matcher.getPrefix())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -80,13 +76,13 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
}
|
||||
}
|
||||
|
||||
private static void addClassLiteralLookupElement(@Nullable final PsiType type, final CompletionResultSet resultSet, final PsiFile context) {
|
||||
private static void addClassLiteralLookupElement(@Nullable final PsiType type, final Consumer<LookupElement> resultSet, final PsiFile context) {
|
||||
if (type instanceof PsiClassType &&
|
||||
PsiUtil.resolveClassInType(type) != null &&
|
||||
!((PsiClassType)type).hasParameters() &&
|
||||
!(((PsiClassType)type).resolve() instanceof PsiTypeParameter)) {
|
||||
try {
|
||||
resultSet.addElement(AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new ClassLiteralLookupElement((PsiClassType)type, context)));
|
||||
resultSet.consume(AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new ClassLiteralLookupElement((PsiClassType)type, context)));
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
*/
|
||||
package com.intellij.psi.filters.getters;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.JavaCompletionUtil;
|
||||
import com.intellij.codeInsight.completion.JavaMethodCallElement;
|
||||
import com.intellij.codeInsight.completion.SmartCompletionDecorator;
|
||||
import com.intellij.codeInsight.completion.JavaCompletionUtil;
|
||||
import com.intellij.codeInsight.lookup.*;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.TrueFilter;
|
||||
@@ -27,6 +26,7 @@ import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
@@ -38,7 +38,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
*/
|
||||
public class MembersGetter {
|
||||
|
||||
public static void addMembers(PsiElement position, PsiType expectedType, CompletionResultSet results) {
|
||||
public static void addMembers(PsiElement position, PsiType expectedType, Consumer<LookupElement> results) {
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(expectedType);
|
||||
processMembers(position, results, psiClass, PsiTreeUtil.getParentOfType(position, PsiAnnotation.class) != null, expectedType);
|
||||
|
||||
@@ -47,7 +47,7 @@ public class MembersGetter {
|
||||
}
|
||||
}
|
||||
|
||||
private static void addConstantsFromTargetClass(PsiElement position, PsiType expectedType, CompletionResultSet results) {
|
||||
private static void addConstantsFromTargetClass(PsiElement position, PsiType expectedType, Consumer<LookupElement> results) {
|
||||
PsiElement parent = position.getParent();
|
||||
if (!(parent instanceof PsiReferenceExpression)) {
|
||||
return;
|
||||
@@ -99,7 +99,7 @@ public class MembersGetter {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void processMembers(final PsiElement context, final CompletionResultSet results, @Nullable final PsiClass where,
|
||||
private static void processMembers(final PsiElement context, final Consumer<LookupElement> results, @Nullable final PsiClass where,
|
||||
final boolean acceptMethods, PsiType expectedType) {
|
||||
if (where == null) return;
|
||||
|
||||
@@ -132,7 +132,7 @@ public class MembersGetter {
|
||||
}
|
||||
final PsiType itemType = ((TypedLookupItem)item).getType();
|
||||
if (itemType != null && expectedType.isAssignableFrom(itemType)) {
|
||||
results.addElement(item);
|
||||
results.consume(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class AbstractCompletionContributor<Params extends CompletionParameters> {
|
||||
|
||||
/**
|
||||
* Fill completion variants.
|
||||
*
|
||||
* Invoked sequentially for all registered contributors in order of registration.
|
||||
*
|
||||
* @param parameters
|
||||
* @param result
|
||||
* @return Whether to continue variants collecting process. If false, remaining non-visited completion contributors are ignored.
|
||||
* @see CompletionService#getVariantsFromContributors(com.intellij.openapi.extensions.ExtensionPointName, CompletionParameters, AbstractCompletionContributor , com.intellij.util.Consumer)
|
||||
*/
|
||||
public abstract void fillCompletionVariants(Params parameters, CompletionResultSet result);
|
||||
}
|
||||
+1
-1
@@ -125,7 +125,7 @@ import java.util.List;
|
||||
*
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class CompletionContributor extends AbstractCompletionContributor<CompletionParameters>{
|
||||
public abstract class CompletionContributor {
|
||||
|
||||
private final MultiMap<CompletionType, Pair<ElementPattern<? extends PsiElement>, CompletionProvider<CompletionParameters>>> myMap =
|
||||
new MultiMap<CompletionType, Pair<ElementPattern<? extends PsiElement>, CompletionProvider<CompletionParameters>>>();
|
||||
|
||||
Reference in New Issue
Block a user