import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.impl.PyImportResolver;
+import com.jetbrains.python.sdk.PySdkUtil;
import com.jetbrains.python.sdk.PythonSdkType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
if (!myWithoutRoots) {
addResultsFromRoots();
}
+ else if (footholdFile != null){
+ addResultsFromSkeletons(footholdFile);
+ }
mySourceResults.addAll(myLibResults);
myLibResults.clear();
return results;
}
+ /**
+ * Resolve relative imports from sdk root to the skeleton dir
+ */
+ private void addResultsFromSkeletons(@NotNull final PsiFile foothold) {
+ final boolean inSource = FileIndexFacade.getInstance(foothold.getProject()).isInContent(foothold.getVirtualFile());
+ if (inSource) return;
+ PsiDirectory containingDirectory = foothold.getContainingDirectory();
+ if (myRelativeLevel > 0) {
+ containingDirectory = ResolveImportUtil.stepBackFrom(foothold, myRelativeLevel);
+ }
+ if (containingDirectory != null) {
+ final QualifiedName containingPath = QualifiedNameFinder.findCanonicalImportPath(containingDirectory, null);
+ if (containingPath != null && containingPath.getComponentCount() > 0) {
+ final QualifiedName absolutePath = containingPath.append(myQualifiedName.toString());
+ final QualifiedNameResolverImpl absoluteVisitor =
+ (QualifiedNameResolverImpl)new QualifiedNameResolverImpl(absolutePath).fromElement(foothold);
+
+ final Sdk sdk = PythonSdkType.getSdk(foothold);
+ if (sdk == null) return;
+ final VirtualFile skeletonsDir = PySdkUtil.findSkeletonsDir(sdk);
+ if (skeletonsDir == null) return;
+ final PsiDirectory directory = myContext.getPsiManager().findDirectory(skeletonsDir);
+ myLibResults.add(absoluteVisitor.resolveModuleAt(directory));
+ }
+ }
+ }
+
private void addResultsFromRoots() {
if (myVisitAllModules) {
for (Module mod : ModuleManager.getInstance(myContext.getProject()).getModules()) {