PY-25234 Fix ordering for imports resolved into binary skeletons of stdlib

Previously, we used the priority of the binary skeletons directory
itself, thus placing them in a wrong THIRD_PARTY group.
This commit is contained in:
Mikhail Golubev
2017-10-23 18:58:30 +03:00
parent 9d8e465ce5
commit 0d89738e05
6 changed files with 24 additions and 5 deletions
@@ -39,6 +39,7 @@ import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.ui.components.JBList;
import com.intellij.util.Consumer;
import com.intellij.util.ObjectUtils;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyPsiUtils;
@@ -48,6 +49,8 @@ import javax.swing.*;
import java.awt.*;
import java.util.List;
import static com.jetbrains.python.psi.PyUtil.as;
/**
* Turns an unqualified unresolved identifier into qualified and resolvable.
*
@@ -148,7 +151,9 @@ public class ImportFromExistingAction implements QuestionAction {
private void addImportStatement(ImportCandidateHolder item) {
final Project project = myTarget.getProject();
final PyElementGenerator gen = PyElementGenerator.getInstance(project);
AddImportHelper.ImportPriority priority = AddImportHelper.getImportPriority(myTarget, item.getFile());
final PsiFileSystemItem filesystemAnchor = ObjectUtils.chooseNotNull(as(item.getImportable(), PsiFileSystemItem.class), item.getFile());
AddImportHelper.ImportPriority priority = AddImportHelper.getImportPriority(myTarget, filesystemAnchor);
PsiFile file = myTarget.getContainingFile();
InjectedLanguageManager manager = InjectedLanguageManager.getInstance(project);
if (manager.isInjectedFragment(file)) {
@@ -0,0 +1,5 @@
import re
import mod
print(re, <error descr="Unresolved reference 'sys'">s<caret>ys</error>, mod)
@@ -0,0 +1,6 @@
import re
import sys
import mod
print(re, sys, mod)
@@ -55,15 +55,18 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase {
doMultiFileAutoImportTest("Import this name");
}
public void testSkeletonStdlibModule() {
doMultiFileAutoImportTest("Import 'sys'");
}
private void doMultiFileAutoImportTest(@NotNull String hintPrefix) {
myFixture.copyDirectoryToProject(getTestName(true), "");
myFixture.enableInspections(PyUnresolvedReferencesInspection.class);
final String entryPoint = "main";
myFixture.configureByFile(entryPoint + ".py");
myFixture.configureByFile("main.py");
myFixture.checkHighlighting(true, false, false);
IntentionAction intention = myFixture.findSingleIntention(hintPrefix);
final IntentionAction intention = myFixture.findSingleIntention(hintPrefix);
myFixture.launchAction(intention);
myFixture.checkResultByFile(getTestName(true) + "/" + entryPoint + "_after.py", true);
myFixture.checkResultByFile(getTestName(true) + "/main_after.py", true);
}
}