use the power of DescriptorPredicate in completion

This commit is contained in:
Stepan Koltsov
2012-06-16 06:44:17 +04:00
parent 010db0495b
commit 65b74a19b4
8 changed files with 139 additions and 46 deletions
@@ -35,6 +35,8 @@ import org.jetbrains.jet.cli.jvm.compiler.TipsManager;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.caches.JetCacheManager;
@@ -347,7 +349,15 @@ public class JetCompletionContributor extends CompletionContributor {
(JetFile)reference.getExpression().getContainingFile())
.getBindingContext();
Collection<DeclarationDescriptor> descriptors = TipsManager.getReferenceVariants(reference.getExpression(), bindingContext);
class PrefixMatcherNamePredicate extends NamePredicate {
@Override
public boolean matches(@NotNull Name name) {
return result.getPrefixMatcher().prefixMatches(name.getName());
}
}
Collection<DeclarationDescriptor> descriptors = TipsManager.getReferenceVariants(
reference.getExpression(), bindingContext, new PrefixMatcherNamePredicate());
Collection<DeclarationDescriptor> checkedDescriptors = Collections2.filter(descriptors, new Predicate<DeclarationDescriptor>() {
@Override
@@ -356,7 +366,7 @@ public class JetCompletionContributor extends CompletionContributor {
return false;
}
return result.getPrefixMatcher().prefixMatches(descriptor.getName().getName()) && isVisibleDescriptor(descriptor, session);
return isVisibleDescriptor(descriptor, session);
}
});
@@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
import org.jetbrains.jet.lang.resolve.scopes.DescriptorPredicate;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
@@ -84,7 +85,7 @@ public abstract class BaseJetVariableMacro extends Macro {
}
List<JetNamedDeclaration> declarations = new ArrayList<JetNamedDeclaration>();
for (DeclarationDescriptor declarationDescriptor : TipsManager.excludeNotCallableExtensions(filteredDescriptors, scope)) {
for (DeclarationDescriptor declarationDescriptor : TipsManager.excludeNotCallableExtensions(filteredDescriptors, scope, NamePredicate.all())) {
PsiElement declaration = BindingContextUtils.descriptorToDeclaration(bc, declarationDescriptor);
assert declaration == null || declaration instanceof PsiNamedElement;
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.JetVisibilityChecker;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
@@ -355,7 +356,7 @@ public class JetFunctionParameterInfoHandler implements
if (scope != null) {
placeDescriptor = scope.getContainingDeclaration();
}
Collection<DeclarationDescriptor> variants = TipsManager.getReferenceVariants(refExpression, bindingContext);
Collection<DeclarationDescriptor> variants = TipsManager.getReferenceVariants(refExpression, bindingContext, NamePredicate.all());
Name refName = refExpression.getReferencedNameAsName();
PsiReference[] references = refExpression.getReferences();
if (references.length == 0) return null;
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetVisitorVoid;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
import java.util.Collection;
@@ -106,7 +107,7 @@ public class JetNameValidatorImpl implements JetNameValidator {
@Override
public void visitExpression(JetExpression expression) {
Collection<DeclarationDescriptor> variants =
TipsManager.getVariantsNoReceiver(expression, myBindingContext);
TipsManager.getVariantsNoReceiver(expression, myBindingContext, NamePredicate.all());
for (DeclarationDescriptor variant : variants) {
if (variant.getName().getName().equals(name) && variant instanceof VariableDescriptor) {
result.set(false);
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.name.NamePredicate;
import org.jetbrains.jet.plugin.completion.DescriptorLookupConverter;
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
@@ -66,7 +67,7 @@ public class JetSimpleNameReference extends JetPsiReference {
.getBindingContext();
return DescriptorLookupConverter.collectLookupElements(
bindingContext, TipsManager.getReferenceVariants(myExpression, bindingContext));
bindingContext, TipsManager.getReferenceVariants(myExpression, bindingContext, NamePredicate.all()));
}
@Override