mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
ResolveImportUtil.multiResolveImportElement() returns all successfully resolved variants for qualified name, not just the first one (PY-2443)
This commit is contained in:
@@ -133,9 +133,15 @@ public class ResolveImportUtil {
|
||||
|
||||
if (moduleQName != null) { // either "from bar import foo" or "from ...bar import foo"
|
||||
final List<PsiElement> candidates = resolveModule(moduleQName, file, absolute_import_enabled, relative_level);
|
||||
List<PsiElement> resultList = new ArrayList<PsiElement>();
|
||||
for (PsiElement candidate : candidates) {
|
||||
PsiElement result = resolveChild(PyUtil.turnDirIntoInit(candidate), first_component, file, null, false, true);
|
||||
if (result != null) return Collections.singletonList(result);
|
||||
if (result != null) {
|
||||
resultList.add(result);
|
||||
}
|
||||
}
|
||||
if (!resultList.isEmpty()) {
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
__all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript']
|
||||
@@ -0,0 +1 @@
|
||||
# placeholder for python interpreter
|
||||
@@ -0,0 +1,2 @@
|
||||
class QPen(object):
|
||||
pass
|
||||
@@ -0,0 +1,3 @@
|
||||
from PySide import QtGui
|
||||
|
||||
QtGui.QPen
|
||||
@@ -0,0 +1,3 @@
|
||||
from PySide import QtGui
|
||||
|
||||
QtGui.QP<caret>
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import com.jetbrains.python.fixtures.PyLightFixtureTestCase;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class PyBinaryModuleCompletionTest extends PyLightFixtureTestCase {
|
||||
public void testPySideImport() { // PY-2443
|
||||
myFixture.configureByFile("completion/pySideImport.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile("completion/pySideImport.after.py");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LightProjectDescriptor getProjectDescriptor() {
|
||||
return ourDescriptor;
|
||||
}
|
||||
|
||||
private static PyLightProjectDescriptor ourDescriptor = new PyLightProjectDescriptor("WithBinaryModules");
|
||||
}
|
||||
@@ -71,7 +71,8 @@ public class PythonAllTestsSuite {
|
||||
EpydocStringTest.class,
|
||||
PyEmacsTabTest.class,
|
||||
PyTypeParserTest.class,
|
||||
PyOverrideTest.class
|
||||
PyOverrideTest.class,
|
||||
PyBinaryModuleCompletionTest.class
|
||||
};
|
||||
|
||||
public static TestSuite suite() {
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.SdkModificator;
|
||||
import com.intellij.openapi.projectRoots.SdkType;
|
||||
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -18,6 +19,9 @@ import java.util.List;
|
||||
public class PythonMockSdk {
|
||||
@NonNls private static final String MOCK_SDK_NAME = "Mock Python SDK";
|
||||
|
||||
private PythonMockSdk() {
|
||||
}
|
||||
|
||||
public static Sdk findOrCreate(String version) {
|
||||
final List<Sdk> sdkList = ProjectJdkTable.getInstance().getSdksOfType(PythonSdkType.getInstance());
|
||||
for (Sdk sdk : sdkList) {
|
||||
@@ -43,8 +47,15 @@ public class PythonMockSdk {
|
||||
};
|
||||
final SdkModificator sdkModificator = sdk.getSdkModificator();
|
||||
sdkModificator.setHomePath(sdkHome);
|
||||
|
||||
File libPath = new File(mock_path, "Lib");
|
||||
if (libPath.exists()) {
|
||||
sdkModificator.addRoot(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(libPath), OrderRootType.CLASSES);
|
||||
}
|
||||
|
||||
String mock_stubs_path = mock_path + PythonSdkType.SKELETON_DIR_NAME;
|
||||
sdkModificator.addRoot(LocalFileSystem.getInstance().refreshAndFindFileByPath(mock_stubs_path), PythonSdkType.BUILTIN_ROOT_TYPE);
|
||||
|
||||
//PythonSdkType.setupSdkPaths(sdkModificator, null);
|
||||
sdkModificator.commitChanges();
|
||||
return sdk;
|
||||
|
||||
Reference in New Issue
Block a user