ResolveImportUtil.multiResolveImportElement() returns all successfully resolved variants for qualified name, not just the first one (PY-2443)

This commit is contained in:
Dmitry Jemerov
2011-05-18 20:01:51 +02:00
parent 00b3390107
commit ccf89f4c69
11 changed files with 52 additions and 2 deletions
@@ -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;