PY-15218 Use "from import" if we insert import for symbol regardless of preferred import style

This commit is contained in:
Mikhail Golubev
2015-03-05 20:43:02 +03:00
parent 64fbff3ffd
commit 6e0f228aaa
6 changed files with 31 additions and 2 deletions
@@ -311,7 +311,8 @@ public final class PyClassRefactoringUtil {
}
final QualifiedName containingQName;
final String importedName;
if (element instanceof PyFile || element instanceof PsiDirectory) {
final boolean importingModuleOrPackage = element instanceof PyFile || element instanceof PsiDirectory;
if (importingModuleOrPackage) {
containingQName = qname.removeLastComponent();
importedName = qname.getLastComponent();
}
@@ -320,7 +321,7 @@ public final class PyClassRefactoringUtil {
importedName = getOriginalName(element);
}
final AddImportHelper.ImportPriority priority = AddImportHelper.getImportPriority(anchor, elementSource);
if (preferFromImport && !containingQName.getComponents().isEmpty()) {
if (preferFromImport && !containingQName.getComponents().isEmpty() || !importingModuleOrPackage) {
return AddImportHelper.addOrUpdateFromImportStatement(file, containingQName.toString(), importedName, asName, priority, anchor);
}
else {
@@ -0,0 +1,7 @@
from b import bar
def foo():
bar()
@@ -0,0 +1,6 @@
def foo():
bar()
def bar():
pass
@@ -26,6 +26,7 @@ import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.SystemProperties;
import com.jetbrains.python.PythonTestUtil;
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyClass;
@@ -285,6 +286,18 @@ public class PyMoveTest extends PyTestCase {
doMoveFileTest("pkg/subpkg2", "");
}
// PY-15218
public void testImportForMovedElementWithPreferredQualifiedImportStyle() {
final boolean defaultImportStyle = PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT;
try {
PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = false;
doMoveSymbolTest("bar", "b.py");
}
finally {
PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = defaultImportStyle;
}
}
private void doMoveFileTest(String fileName, String toDirName) {
Project project = myFixture.getProject();
PsiManager manager = PsiManager.getInstance(project);