mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
reducing the scariness of ResolveImportUtil
This commit is contained in:
@@ -217,7 +217,8 @@ public class PyImportElementImpl extends PyBaseElementImpl<PyImportElementStub>
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement resolve() {
|
||||
return ResolveImportUtil.resolveImportElement(this, getImportedQName());
|
||||
PyQualifiedName qName = getImportedQName();
|
||||
return qName == null ? null : ResolveImportUtil.resolveImportElement(this, qName);
|
||||
}
|
||||
|
||||
public boolean mustResolveOutside() {
|
||||
|
||||
@@ -133,7 +133,7 @@ public class PyImportedModule extends LightElement implements NameDefiner {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement resolve(PyImportElement importElement, final PyQualifiedName prefix) {
|
||||
private static PsiElement resolve(PyImportElement importElement, @NotNull final PyQualifiedName prefix) {
|
||||
return PyUtil.turnDirIntoInit(ResolveImportUtil.resolveImportElement(importElement, prefix));
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,14 @@ package com.jetbrains.python.psi.impl.references;
|
||||
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.jetbrains.python.psi.PyFromImportStatement;
|
||||
import com.jetbrains.python.psi.PyImportElement;
|
||||
import com.jetbrains.python.psi.impl.PyQualifiedName;
|
||||
import com.jetbrains.python.psi.impl.PyReferenceExpressionImpl;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext;
|
||||
import com.jetbrains.python.psi.resolve.RatedResolveResult;
|
||||
import com.jetbrains.python.psi.resolve.ResolveImportUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -18,13 +19,10 @@ import java.util.List;
|
||||
* @author yole
|
||||
*/
|
||||
public class PyFromImportNameReference extends PyImportReference {
|
||||
private final PyImportElement myImportElement;
|
||||
private final PyFromImportStatement myStatement;
|
||||
|
||||
public PyFromImportNameReference(PyReferenceExpressionImpl element, PyResolveContext context) {
|
||||
super(element, context);
|
||||
myImportElement = PsiTreeUtil.getParentOfType(element, PyImportElement.class);
|
||||
assert myImportElement != null;
|
||||
myStatement = PsiTreeUtil.getParentOfType(element, PyFromImportStatement.class);
|
||||
assert myStatement != null;
|
||||
}
|
||||
@@ -32,6 +30,9 @@ public class PyFromImportNameReference extends PyImportReference {
|
||||
@NotNull
|
||||
@Override
|
||||
protected List<RatedResolveResult> resolveInner() {
|
||||
return ResolveImportUtil.resolveNameInFromImport(myImportElement, myElement.asQualifiedName(), myStatement);
|
||||
PyQualifiedName qName = myElement.asQualifiedName();
|
||||
return qName == null
|
||||
? Collections.<RatedResolveResult>emptyList()
|
||||
: ResolveImportUtil.resolveNameInFromImport(myStatement, qName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,12 +63,9 @@ public class PyImportReference extends PyReferenceImpl {
|
||||
@NotNull
|
||||
@Override
|
||||
protected List<RatedResolveResult> resolveInner() {
|
||||
final String referencedName = myElement.getReferencedName();
|
||||
if (referencedName == null) return Collections.emptyList();
|
||||
|
||||
final PyImportElement parent = PsiTreeUtil.getParentOfType(myElement, PyImportElement.class); //importRef.getParent();
|
||||
final PyQualifiedName qname = myElement.asQualifiedName();
|
||||
return ResolveImportUtil.resolveNameInImportStatement(parent, qname);
|
||||
return qname == null ? Collections.<RatedResolveResult>emptyList() : ResolveImportUtil.resolveNameInImportStatement(parent, qname);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -81,41 +81,28 @@ public class ResolveImportUtil {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiElement resolveImportElement(PyImportElement importElement, final PyQualifiedName qName) {
|
||||
final List<RatedResolveResult> resultList = RatedResolveResult.sorted(multiResolveImportElement(importElement, qName));
|
||||
public static PsiElement resolveImportElement(PyImportElement importElement, @NotNull final PyQualifiedName qName) {
|
||||
List<RatedResolveResult> targets;
|
||||
final PyStatement importStatement = importElement.getContainingImportStatement();
|
||||
if (importStatement instanceof PyFromImportStatement) {
|
||||
targets = resolveNameInFromImport((PyFromImportStatement)importStatement, qName);
|
||||
}
|
||||
else { // "import foo"
|
||||
targets = resolveNameInImportStatement(importElement, qName);
|
||||
}
|
||||
final List<RatedResolveResult> resultList = RatedResolveResult.sorted(targets);
|
||||
return resultList.size() > 0 ? resultList.get(0).getElement() : null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<RatedResolveResult> multiResolveImportElement(PyImportElement importElement, final PyQualifiedName qName) {
|
||||
final PyStatement importStatement = importElement.getContainingImportStatement();
|
||||
if (importStatement instanceof PyFromImportStatement) {
|
||||
return resolveNameInFromImport(importElement, qName, (PyFromImportStatement)importStatement);
|
||||
}
|
||||
else { // "import foo"
|
||||
return resolveNameInImportStatement(importElement, qName);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<RatedResolveResult> resolveNameInImportStatement(PyImportElement importElement, PyQualifiedName qName) {
|
||||
if (qName == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
public static List<RatedResolveResult> resolveNameInImportStatement(PyImportElement importElement, @NotNull PyQualifiedName qName) {
|
||||
final PsiFile file = importElement.getContainingFile().getOriginalFile();
|
||||
boolean absoluteImportEnabled = isAbsoluteImportEnabledFor(importElement);
|
||||
final List<PsiElement> modules = resolveModule(qName, file, absoluteImportEnabled, 0);
|
||||
if (modules.size() > 0) {
|
||||
return rateResults(modules);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
return rateResults(modules);
|
||||
}
|
||||
|
||||
public static List<RatedResolveResult> resolveNameInFromImport(PyImportElement importElement, PyQualifiedName qName,
|
||||
PyFromImportStatement importStatement) {
|
||||
if (qName == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
PsiFile file = importElement.getContainingFile().getOriginalFile();
|
||||
public static List<RatedResolveResult> resolveNameInFromImport(PyFromImportStatement importStatement, @NotNull PyQualifiedName qName) {
|
||||
PsiFile file = importStatement.getContainingFile().getOriginalFile();
|
||||
String name = qName.getComponents().get(0);
|
||||
|
||||
final List<PsiElement> candidates = importStatement.resolveImportSourceCandidates();
|
||||
|
||||
Reference in New Issue
Block a user