mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-20427 Handle qualified references in the module where symbol is moved to
This commit is contained in:
+11
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user