in src/java/org/jetbrains/plugins/clojure/psi/resolve/completion/ClojureCompletionContributor.java [18:57]
public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) {
super.fillCompletionVariants(parameters, result);
if (parameters.getCompletionType() != CompletionType.BASIC) return; //only basic completion is here
result.restartCompletionWhenNothingMatches();
final PsiElement position = parameters.getPosition();
final PsiElement parent = position.getParent();
final boolean isClassName = ClojureClassNameCompletionContributor.shouldRunClassName(parameters,
result.getPrefixMatcher(), true);
if (parent instanceof ClSymbol) {
ClSymbol symbol = (ClSymbol) parent;
final Object[] variants = symbol.getVariants();
Ref<Boolean> elementAdded = new Ref<Boolean>(Boolean.FALSE);
for (Object variant : variants) {
if (variant instanceof ClojureLookupItem) {
ClojureLookupItem lookupItem = (ClojureLookupItem) variant;
final PsiElement element = lookupItem.getPsiElement();
if (element instanceof PsiClass) {
final PsiClass clazz = (PsiClass) element;
boolean isExcluded = ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
public Boolean compute() {
return JavaCompletionUtil.isInExcludedPackage(clazz, true);
}
});
if (!isExcluded && !isClassName) {
addElement(result, lookupItem, elementAdded);
}
} else {
addElement(result, lookupItem, elementAdded);
}
} else if (variant instanceof LookupElement) {
addElement(result, (LookupElement) variant, elementAdded);
}
}
if (!elementAdded.get() && !isClassName && ClojureClassNameCompletionContributor.shouldRunClassName(parameters,
result.getPrefixMatcher(), false)) {
ClojureClassNameCompletionContributor.completeClassName(parameters, result);
}
result.stopHere(); //we want to handle all Clojure completion, so we don't need anything more
}
}