private static Set<LookupElement> suggestQualifierItems( CompletionParameters parameters, PsiJavaCodeReferenceElement qualifier, ElementFilter filter) { String referenceName = qualifier.getReferenceName(); if (referenceName == null) { return Collections.emptySet(); } PrefixMatcher qMatcher = new CamelHumpMatcher(referenceName); Set<LookupElement> plainVariants = JavaSmartCompletionContributor.completeReference( qualifier, qualifier, filter, true, true, parameters, qMatcher); for (PsiClass aClass : PsiShortNamesCache.getInstance(qualifier.getProject()) .getClassesByName(referenceName, qualifier.getResolveScope())) { plainVariants.add(JavaClassNameCompletionContributor.createClassLookupItem(aClass, true)); } if (!plainVariants.isEmpty()) { return plainVariants; } final Set<LookupElement> allClasses = new LinkedHashSet<LookupElement>(); PsiElement qualifierName = qualifier.getReferenceNameElement(); if (qualifierName != null) { JavaClassNameCompletionContributor.addAllClasses( parameters.withPosition(qualifierName, qualifierName.getTextRange().getEndOffset()), true, qMatcher, new CollectConsumer<LookupElement>(allClasses)); } return allClasses; }
@NotNull @Override protected List<PsiField> getMembersToImport(boolean applicableOnly) { final Project project = myRef.getProject(); PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project); final PsiJavaCodeReferenceElement element = myRef.getElement(); String name = element != null ? element.getReferenceName() : null; if (name == null) return Collections.emptyList(); final StaticMembersProcessor<PsiField> processor = new StaticMembersProcessor<PsiField>(element) { @Override protected boolean isApplicable(PsiField field, PsiElement place) { final PsiType expectedType = getExpectedType(); return expectedType == null || TypeConversionUtil.isAssignable(expectedType, field.getType()); } }; cache.processFieldsWithName(name, processor, element.getResolveScope(), null); return processor.getMembersToImport(applicableOnly); }