PY-20427 Handle qualified references in the module where symbol is moved to

This commit is contained in:
Mikhail Golubev
2016-11-22 17:50:21 +03:00
parent 5c3b5e06fa
commit 5fa7c78ebe
6 changed files with 41 additions and 6 deletions
@@ -192,13 +192,18 @@ public class PyMoveSymbolProcessor {
*/
private static void insertQualifiedImportAndReplaceReference(@NotNull PsiNamedElement targetElement,
@NotNull PyQualifiedExpression expression) {
final PsiFile file = targetElement.getContainingFile();
final QualifiedName qualifier = QualifiedNameFinder.findCanonicalImportPath(file, expression);
PyClassRefactoringUtil.insertImport(expression, file, null, false);
final PyElementGenerator generator = PyElementGenerator.getInstance(expression.getProject());
final PyExpression generated = generator.createExpressionFromText(LanguageLevel.forElement(expression),
qualifier + "." + expression.getReferencedName());
expression.replace(generated);
final PsiFile srcFile = targetElement.getContainingFile();
final LanguageLevel languageLevel = LanguageLevel.forElement(expression);
if (srcFile != expression.getContainingFile()) {
final QualifiedName qualifier = QualifiedNameFinder.findCanonicalImportPath(srcFile, expression);
PyClassRefactoringUtil.insertImport(expression, srcFile, null, false);
final String newQualifiedReference = qualifier + "." + expression.getReferencedName();
expression.replace(generator.createExpressionFromText(languageLevel, newQualifiedReference));
}
else {
expression.replace(generator.createExpressionFromText(languageLevel, expression.getReferencedName()));
}
}
private static boolean resolvesToLocalStarImport(@NotNull PsiElement usage) {
@@ -0,0 +1 @@
something_else = 2
@@ -0,0 +1,12 @@
import a
def bar():
print(FOO)
def some_other_fn():
print(a.something_else)
FOO = 1
@@ -0,0 +1,3 @@
FOO = 1
something_else = 2
@@ -0,0 +1,9 @@
import a
def bar():
print(a.FOO)
def some_other_fn():
print(a.something_else)
@@ -371,6 +371,11 @@ public class PyMoveTest extends PyTestCase {
doMoveSymbolTest("A", "b.py");
}
// PY-20427
public void testQualifiedReferenceInDestinationModule() {
doMoveSymbolTest("FOO", "b.py");
}
private void doMoveFileTest(String fileName, String toDirName) {
Project project = myFixture.getProject();
PsiManager manager = PsiManager.getInstance(project);