mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[PY-84659] Moving a symbol respects PyCodeInsightSettings.PREFER_FROM_IMPORT for qualified usages
(cherry picked from commit 00c7867db4fa463c6a2eabb32bfa181bb25311d6) GitOrigin-RevId: 83c0b47a97bbbd8f74279766eecefc05b3381784
This commit is contained in:
committed by
intellij-monorepo-bot
parent
00e64bd481
commit
861247150d
+12
-3
@@ -11,6 +11,7 @@ import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.PyDunderAllReference;
|
||||
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
|
||||
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
|
||||
@@ -214,9 +215,17 @@ public class PyMoveSymbolProcessor {
|
||||
final LanguageLevel languageLevel = LanguageLevel.forElement(expression);
|
||||
if (srcFile != expression.getContainingFile()) {
|
||||
final QualifiedName qualifier = QualifiedNameFinder.findCanonicalImportPath(srcFile, expression);
|
||||
PyPsiRefactoringUtil.insertImport(expression, srcFile, null, false);
|
||||
final String newQualifiedReference = qualifier + "." + expression.getReferencedName();
|
||||
expression.replace(generator.createExpressionFromText(languageLevel, newQualifiedReference));
|
||||
if (PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT) {
|
||||
PyPsiRefactoringUtil.insertImport(expression, srcFile, null, true);
|
||||
final String moduleName = qualifier.getLastComponent();
|
||||
final String newQualifiedReference = moduleName + "." + expression.getReferencedName();
|
||||
expression.replace(generator.createExpressionFromText(languageLevel, newQualifiedReference));
|
||||
}
|
||||
else {
|
||||
PyPsiRefactoringUtil.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()));
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
from lib import src, dst
|
||||
|
||||
assert dst.C
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
class C:
|
||||
pass
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
from lib import src
|
||||
|
||||
assert src.C
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
class C:
|
||||
pass
|
||||
@@ -3,6 +3,7 @@ package com.jetbrains.python.refactoring;
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.idea.TestFor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
@@ -282,6 +283,18 @@ public class PyMoveTest extends PyTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
@TestFor(issues="PY-84659")
|
||||
public void testQualifiedUsageRespectsPreferFromImport() {
|
||||
final boolean defaultImportStyle = PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT;
|
||||
try {
|
||||
PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = true;
|
||||
doMoveSymbolTest("C", "lib/dst.py");
|
||||
}
|
||||
finally {
|
||||
PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = defaultImportStyle;
|
||||
}
|
||||
}
|
||||
|
||||
// PY-10553
|
||||
public void testMoveModuleWithSameNameAsSymbolInside() {
|
||||
doMoveFileTest("Animals/Carnivore.py", "Animals/test");
|
||||
|
||||
Reference in New Issue
Block a user