Merge remote-tracking branch 'origin/master'

This commit is contained in:
Ekaterina Tuzova
2014-11-14 16:57:57 +03:00
12 changed files with 39 additions and 8 deletions
@@ -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() {