mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -150,6 +150,15 @@ public class PsiExpressionTrimRenderer extends JavaRecursiveElementWalkingVisito
|
||||
expr.getArgumentList().accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodReferenceExpression(PsiMethodReferenceExpression expression) {
|
||||
final PsiElement qualifier = expression.getQualifier();
|
||||
if (qualifier != null) {
|
||||
qualifier.accept(this);
|
||||
}
|
||||
myBuf.append("::");
|
||||
myBuf.append(expression.getReferenceName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitArrayInitializerExpression(final PsiArrayInitializerExpression expression) {
|
||||
|
||||
@@ -179,9 +179,11 @@ public class AddImportHelper {
|
||||
* @param file where to operate
|
||||
* @param name which to import (qualified is OK)
|
||||
* @param asName optional name for 'as' clause
|
||||
* @param anchor place where the imported name was used
|
||||
* @return whether import statement was actually added
|
||||
*/
|
||||
public static boolean addImportStatement(PsiFile file, String name, @Nullable String asName, ImportPriority priority) {
|
||||
public static boolean addImportStatement(PsiFile file, String name, @Nullable String asName, ImportPriority priority,
|
||||
@Nullable PsiElement anchor) {
|
||||
if (!(file instanceof PyFile)) {
|
||||
return false;
|
||||
}
|
||||
@@ -198,8 +200,11 @@ public class AddImportHelper {
|
||||
final PyElementGenerator generator = PyElementGenerator.getInstance(file.getProject());
|
||||
final LanguageLevel languageLevel = LanguageLevel.forElement(file);
|
||||
final PyImportStatement importNodeToInsert = generator.createImportStatement(languageLevel, name, asName);
|
||||
final PyImportStatementBase importStatement = PsiTreeUtil.getParentOfType(anchor, PyImportStatementBase.class, false);
|
||||
final PsiElement insertParent = importStatement != null && importStatement.getContainingFile() == file ?
|
||||
importStatement.getParent() : file;
|
||||
try {
|
||||
file.addBefore(importNodeToInsert, getInsertPosition(file, name, priority));
|
||||
insertParent.addBefore(importNodeToInsert, getInsertPosition(insertParent, name, priority));
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
@@ -283,12 +288,12 @@ public class AddImportHelper {
|
||||
if (qName == null) return;
|
||||
String path = qName.toString();
|
||||
if (target instanceof PsiFileSystemItem && qName.getComponentCount() == 1) {
|
||||
addImportStatement(file, path, null, priority);
|
||||
addImportStatement(file, path, null, priority, element);
|
||||
}
|
||||
else {
|
||||
final QualifiedName toImportQName = QualifiedNameFinder.findCanonicalImportPath(toImport, element);
|
||||
if (useQualified) {
|
||||
addImportStatement(file, path, null, priority);
|
||||
addImportStatement(file, path, null, priority, element);
|
||||
final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(file.getProject());
|
||||
final String targetName = PyUtil.getElementNameWithoutExtension(target);
|
||||
element.replace(elementGenerator.createExpressionFromText(LanguageLevel.forElement(target), toImportQName + "." + targetName));
|
||||
|
||||
@@ -158,7 +158,7 @@ public class ImportFromExistingAction implements QuestionAction {
|
||||
if (myImportLocally) {
|
||||
AddImportHelper.addLocalImportStatement(myTarget, myName);
|
||||
} else {
|
||||
AddImportHelper.addImportStatement(file, myName, null, priority);
|
||||
AddImportHelper.addImportStatement(file, myName, null, priority, null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -172,7 +172,7 @@ public class ImportFromExistingAction implements QuestionAction {
|
||||
AddImportHelper.addLocalImportStatement(myTarget, nameToImport);
|
||||
}
|
||||
else {
|
||||
AddImportHelper.addImportStatement(file, nameToImport, null, priority);
|
||||
AddImportHelper.addImportStatement(file, nameToImport, null, priority, null);
|
||||
}
|
||||
myTarget.replace(gen.createExpressionFromText(LanguageLevel.forElement(myTarget), qualifiedName + "." + myName));
|
||||
}
|
||||
|
||||
@@ -321,7 +321,7 @@ public final class PyClassRefactoringUtil {
|
||||
return AddImportHelper.addImportFrom(file, null, containingQName.toString(), importedName, asName, priority, anchor);
|
||||
}
|
||||
else {
|
||||
return AddImportHelper.addImportStatement(file, containingQName.append(importedName).toString(), asName, priority);
|
||||
return AddImportHelper.addImportStatement(file, containingQName.append(importedName).toString(), asName, priority, anchor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
if True:
|
||||
import pkgutil
|
||||
else:
|
||||
import mod2 as pkgutil
|
||||
|
||||
print(pkgutil)
|
||||
@@ -0,0 +1,6 @@
|
||||
if True:
|
||||
import pkgutil
|
||||
else:
|
||||
from pkg1 import mod2 as pkgutil
|
||||
|
||||
print(pkgutil)
|
||||
@@ -34,7 +34,7 @@ public class PyAddImportTest extends PyTestCase {
|
||||
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
|
||||
@Override
|
||||
protected void run(Result result) throws Throwable {
|
||||
AddImportHelper.addImportStatement(myFixture.getFile(), "re", null, AddImportHelper.ImportPriority.BUILTIN);
|
||||
AddImportHelper.addImportStatement(myFixture.getFile(), "re", null, AddImportHelper.ImportPriority.BUILTIN, null);
|
||||
}
|
||||
}.execute();
|
||||
myFixture.checkResultByFile("addImport/addBuiltin.after.py");
|
||||
|
||||
@@ -139,6 +139,11 @@ public class PyMoveTest extends PyTestCase {
|
||||
doMoveFileTest("mod2.py", "pkg1");
|
||||
}
|
||||
|
||||
// PY-13870
|
||||
public void testConditionalImportFromPackage() {
|
||||
doMoveFileTest("pkg1/mod2.py", "");
|
||||
}
|
||||
|
||||
// PY-7378
|
||||
public void testMoveNamespacePackage1() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON33, new Runnable() {
|
||||
|
||||
Reference in New Issue
Block a user