mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 06:05:01 +07:00
local members are more preferrable than global static ones
This commit is contained in:
+17
-3
@@ -22,7 +22,7 @@ import com.intellij.codeInsight.hint.ShowParameterInfoHandler;
|
||||
import com.intellij.codeInsight.lookup.*;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.lang.LangBundle;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -208,7 +208,7 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
|
||||
final PsiElement position = parameters.getPosition();
|
||||
if (!position.getContainingFile().getLanguage().isKindOf(StdLanguages.JAVA)) {
|
||||
if (!position.getContainingFile().getLanguage().isKindOf(JavaLanguage.INSTANCE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -230,8 +230,9 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
new TypeArgumentCompletionProvider(false, inheritors).addCompletions(parameters, new ProcessingContext(), result);
|
||||
}
|
||||
|
||||
PrefixMatcher matcher = result.getPrefixMatcher();
|
||||
if (JavaSmartCompletionContributor.AFTER_NEW.accepts(position)) {
|
||||
new JavaInheritorsGetter(ConstructorInsertHandler.BASIC_INSTANCE).generateVariants(parameters, result.getPrefixMatcher(), inheritors);
|
||||
new JavaInheritorsGetter(ConstructorInsertHandler.BASIC_INSTANCE).generateVariants(parameters, matcher, inheritors);
|
||||
}
|
||||
|
||||
if (IMPORT_REFERENCE.accepts(position)) {
|
||||
@@ -250,6 +251,19 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
|
||||
addAllClasses(parameters, result, inheritors);
|
||||
|
||||
final PsiElement parent = position.getParent();
|
||||
if (parent instanceof PsiReferenceExpression &&
|
||||
!((PsiReferenceExpression)parent).isQualified() &&
|
||||
parameters.isExtendedCompletion() &&
|
||||
StringUtil.isNotEmpty(matcher.getPrefix())) {
|
||||
new JavaStaticMemberProcessor(parameters).processStaticMethodsGlobally(matcher, new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
result.addElement(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
result.stopHere();
|
||||
}
|
||||
|
||||
|
||||
@@ -464,7 +464,7 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
|
||||
if (javaReference instanceof PsiJavaCodeReferenceElement && !((PsiJavaCodeReferenceElement)javaReference).isQualified()) {
|
||||
final StaticMemberProcessor memberProcessor = JavaGlobalMemberNameCompletionContributor.completeStaticMembers(parameters);
|
||||
final StaticMemberProcessor memberProcessor = new JavaStaticMemberProcessor(parameters);
|
||||
memberProcessor.processMembersOfRegisteredClasses(matcher, new PairConsumer<PsiMember, PsiClass>() {
|
||||
@Override
|
||||
public void consume(PsiMember member, PsiClass psiClass) {
|
||||
|
||||
-84
@@ -1,84 +0,0 @@
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.VariableLookupItem;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class JavaGlobalMemberNameCompletionContributor extends CompletionContributor {
|
||||
|
||||
@Override
|
||||
public void fillCompletionVariants(CompletionParameters parameters, final CompletionResultSet result) {
|
||||
if (!parameters.isExtendedCompletion()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.getPrefixMatcher().getPrefix().length() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiElement parent = position.getParent();
|
||||
if (!(parent instanceof PsiReferenceExpression)) {
|
||||
return;
|
||||
}
|
||||
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)parent;
|
||||
if (referenceExpression.isQualified()) {
|
||||
return;
|
||||
}
|
||||
|
||||
completeStaticMembers(parameters).processStaticMethodsGlobally(result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
result.addElement(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static StaticMemberProcessor completeStaticMembers(CompletionParameters parameters) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiElement originalPosition = parameters.getOriginalPosition();
|
||||
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
|
||||
if (member instanceof PsiMethod) {
|
||||
return AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new JavaMethodCallElement((PsiMethod)member, shouldImport, false));
|
||||
}
|
||||
return AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new VariableLookupItem((PsiField)member, shouldImport));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull List<PsiMethod> overloads,
|
||||
@NotNull PsiClass containingClass,
|
||||
boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement(overloads.get(0), shouldImport, true);
|
||||
element.putUserData(JavaCompletionUtil.ALL_METHODS_ATTRIBUTE, overloads);
|
||||
return element;
|
||||
}
|
||||
};
|
||||
final PsiFile file = position.getContainingFile();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
final PsiImportList importList = ((PsiJavaFile)file).getImportList();
|
||||
if (importList != null) {
|
||||
for (PsiImportStaticStatement statement : importList.getImportStaticStatements()) {
|
||||
processor.importMembersOf(statement.resolveTargetClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return processor;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.VariableLookupItem;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class JavaStaticMemberProcessor extends StaticMemberProcessor {
|
||||
private final PsiElement myOriginalPosition;
|
||||
|
||||
public JavaStaticMemberProcessor(CompletionParameters parameters) {
|
||||
super(parameters.getPosition());
|
||||
myOriginalPosition = parameters.getOriginalPosition();
|
||||
|
||||
final PsiFile file = parameters.getPosition().getContainingFile();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
final PsiImportList importList = ((PsiJavaFile)file).getImportList();
|
||||
if (importList != null) {
|
||||
for (PsiImportStaticStatement statement : importList.getImportStaticStatements()) {
|
||||
importMembersOf(statement.resolveTargetClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
|
||||
shouldImport |= myOriginalPosition != null && PsiTreeUtil.isAncestor(containingClass, myOriginalPosition, false);
|
||||
|
||||
if (member instanceof PsiMethod) {
|
||||
return AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new JavaMethodCallElement((PsiMethod)member, shouldImport, false));
|
||||
}
|
||||
return AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new VariableLookupItem((PsiField)member, shouldImport));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull List<PsiMethod> overloads,
|
||||
@NotNull PsiClass containingClass,
|
||||
boolean shouldImport) {
|
||||
shouldImport |= myOriginalPosition != null && PsiTreeUtil.isAncestor(containingClass, myOriginalPosition, false);
|
||||
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement(overloads.get(0), shouldImport, true);
|
||||
element.putUserData(JavaCompletionUtil.ALL_METHODS_ATTRIBUTE, overloads);
|
||||
return element;
|
||||
}
|
||||
}
|
||||
+7
-2
@@ -53,7 +53,7 @@ public class PreferLocalVariablesLiteralsAndAnnoMethodsWeigher extends LookupEle
|
||||
expectedTypeMember,
|
||||
nonInitialized,
|
||||
classLiteral,
|
||||
className,
|
||||
classNameOrGlobalStatic,
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -105,6 +105,11 @@ public class PreferLocalVariablesLiteralsAndAnnoMethodsWeigher extends LookupEle
|
||||
}
|
||||
|
||||
if (myCompletionType == CompletionType.BASIC) {
|
||||
StaticallyImportable callElement = item.as(StaticallyImportable.CLASS_CONDITION_KEY);
|
||||
if (callElement != null && callElement.canBeImported() && !callElement.willBeImported()) {
|
||||
return MyResult.classNameOrGlobalStatic;
|
||||
}
|
||||
|
||||
if (object instanceof PsiKeyword && PsiKeyword.CLASS.equals(item.getLookupString())) {
|
||||
return MyResult.classLiteral;
|
||||
}
|
||||
@@ -114,7 +119,7 @@ public class PreferLocalVariablesLiteralsAndAnnoMethodsWeigher extends LookupEle
|
||||
}
|
||||
|
||||
if (object instanceof PsiClass) {
|
||||
return MyResult.className;
|
||||
return MyResult.classNameOrGlobalStatic;
|
||||
}
|
||||
|
||||
if (object instanceof PsiField && myNonInitializedFields.contains(object)) {
|
||||
|
||||
@@ -45,7 +45,7 @@ public class JavaMembersGetter extends MembersGetter {
|
||||
}
|
||||
|
||||
public void addMembers(CompletionParameters parameters, boolean searchInheritors, final Consumer<LookupElement> results) {
|
||||
final StaticMemberProcessor processor = JavaGlobalMemberNameCompletionContributor.completeStaticMembers(parameters);
|
||||
final StaticMemberProcessor processor = new JavaStaticMemberProcessor(parameters);
|
||||
final PsiElement position = parameters.getPosition();
|
||||
if (myExpectedType instanceof PsiPrimitiveType && PsiType.DOUBLE.isAssignableFrom(myExpectedType)) {
|
||||
addConstantsFromTargetClass(position, results, searchInheritors, processor);
|
||||
|
||||
Reference in New Issue
Block a user