prioritization of implicit resolve results (initial)

This commit is contained in:
Dmitry Jemerov
2011-08-12 18:54:17 +02:00
parent a619953d57
commit f21702df45
2 changed files with 19 additions and 5 deletions
@@ -4,11 +4,11 @@ import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.ProjectScope;
import com.intellij.psi.stubs.StubUpdatingIndex;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ArrayUtil;
@@ -80,7 +80,7 @@ public class PyQualifiedReferenceImpl extends PyReferenceImpl {
}
PyFunction pyFunction = (PyFunction) function;
if (pyFunction.getContainingClass() != null) {
ret.add(new ImplicitResolveResult(pyFunction));
ret.add(new ImplicitResolveResult(pyFunction, getFunctionRate(pyFunction)));
}
}
}
@@ -91,6 +91,20 @@ public class PyQualifiedReferenceImpl extends PyReferenceImpl {
return ret;
}
private int getFunctionRate(PyFunction pyFunction) {
int rate = RatedResolveResult.RATE_LOW;
if (pyFunction.getContainingFile() == myElement.getContainingFile()) {
rate += 200;
}
else {
final VirtualFile vFile = pyFunction.getContainingFile().getVirtualFile();
if (vFile != null && ProjectScope.getProjectScope(myElement.getProject()).contains(vFile)) {
rate += 80;
}
}
return rate;
}
private static boolean canQualifyAnImplicitName(@NotNull PyExpression qualifier, @Nullable PyType qualType) {
if (qualType == null) {
if (qualifier instanceof PyCallExpression) {
@@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable;
* @author yole
*/
public class ImplicitResolveResult extends RatedResolveResult {
public ImplicitResolveResult(@Nullable final PsiElement element) {
super(RATE_LOW, element);
public ImplicitResolveResult(@Nullable final PsiElement element, final int rate) {
super(rate, element);
}
}