disable static import on-the-fly suggestion if nothing applicable found (following IDEA-CR-7943)

This commit is contained in:
Anna Kozlova
2016-01-22 14:29:01 +03:00
parent 097d08f04e
commit 6835cb34f1
4 changed files with 10 additions and 9 deletions
@@ -46,7 +46,7 @@ abstract class MyStaticMembersProcessor<T extends PsiMember> implements Processo
protected abstract boolean isApplicable(T member, PsiElement place);
@NotNull
public List<T> getMembersToImport() {
public List<T> getMembersToImport(boolean applicableOnly) {
final List<T> list = new ArrayList<T>();
final List<T> applicableList = new ArrayList<T>();
for (Map.Entry<PsiClass, Collection<T>> methodEntry : mySuggestions.entrySet()) {
@@ -57,7 +57,7 @@ abstract class MyStaticMembersProcessor<T extends PsiMember> implements Processo
registerMember(deprecatedMethod.getKey(), deprecatedMethod.getValue(), list, applicableList);
}
List<T> result = applicableList.isEmpty() ? list : applicableList;
List<T> result = !applicableOnly && applicableList.isEmpty() ? list : applicableList;
for (int i = result.size() - 1; i >= 0; i--) {
ProgressManager.checkCanceled();
T method = result.get(i);
@@ -52,7 +52,7 @@ public class StaticImportConstantFix extends StaticImportMemberFix<PsiField> {
@NotNull
@Override
protected List<PsiField> getMembersToImport() {
protected List<PsiField> getMembersToImport(boolean applicableOnly) {
final Project project = myRef.getProject();
PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project);
final PsiJavaCodeReferenceElement element = myRef.getElement();
@@ -66,7 +66,7 @@ public class StaticImportConstantFix extends StaticImportMemberFix<PsiField> {
}
};
cache.processFieldsWithName(name, processor, element.getResolveScope(), null);
return processor.getMembersToImport();
return processor.getMembersToImport(applicableOnly);
}
@NotNull
@@ -70,11 +70,11 @@ public abstract class StaticImportMemberFix<T extends PsiMember> implements Inte
&& getQualifierExpression() == null
&& resolveRef() == null
&& file.getManager().isInProject(file)
&& !(candidates == null ? candidates = getMembersToImport() : candidates).isEmpty()
&& !(candidates == null ? candidates = getMembersToImport(false) : candidates).isEmpty()
;
}
@NotNull protected abstract List<T> getMembersToImport();
@NotNull protected abstract List<T> getMembersToImport(boolean applicableOnly);
@NotNull protected abstract QuestionAction createQuestionAction(List<T> methodsToImport, @NotNull Project project, Editor editor);
@Nullable protected abstract PsiElement getElement();
@@ -87,7 +87,7 @@ public abstract class StaticImportMemberFix<T extends PsiMember> implements Inte
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
final List<T> methodsToImport = getMembersToImport();
final List<T> methodsToImport = getMembersToImport(false);
if (methodsToImport.isEmpty()) return;
createQuestionAction(methodsToImport, project, editor).execute();
}
@@ -95,6 +95,7 @@ public abstract class StaticImportMemberFix<T extends PsiMember> implements Inte
}
private ImportClassFixBase.Result doFix(Editor editor) {
final List<T> candidates = getMembersToImport(true);
if (candidates.isEmpty()) {
return ImportClassFixBase.Result.POPUP_NOT_SHOWN;
}
@@ -55,7 +55,7 @@ public class StaticImportMethodFix extends StaticImportMemberFix<PsiMethod> {
@NotNull
@Override
protected List<PsiMethod> getMembersToImport() {
protected List<PsiMethod> getMembersToImport(boolean applicableOnly) {
final Project project = myMethodCall.getProject();
PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project);
final PsiMethodCallExpression element = myMethodCall.getElement();
@@ -64,7 +64,7 @@ public class StaticImportMethodFix extends StaticImportMemberFix<PsiMethod> {
if (name == null) return Collections.emptyList();
final MyStaticMembersProcessor<PsiMethod> processor = new MyStaticMethodProcessor(project, element);
cache.processMethodsWithName(name, element.getResolveScope(), processor);
return processor.getMembersToImport();
return processor.getMembersToImport(applicableOnly);
}
public static boolean isExcluded(PsiMember method) {