Merge remote branch 'origin/master'

This commit is contained in:
Ekaterina Tuzova
2011-06-28 20:31:01 +04:00
5 changed files with 31 additions and 11 deletions
@@ -52,6 +52,10 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor {
public void visitPyClass(final PyClass node) {
// Create node and stop here
myBuilder.startNode(node);
final ReadWriteInstruction instruction = ReadWriteInstruction.newInstruction(myBuilder, node, node.getName(),
ReadWriteInstruction.ACCESS.WRITE);
myBuilder.addNode(instruction);
myBuilder.checkPending(instruction);
}
@Override
@@ -64,7 +68,8 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor {
public void visitPyCallExpression(final PyCallExpression node) {
final PyExpression callee = node.getCallee();
// Flow abrupted
if (callee != null && "sys.exit".equals(PyUtil.getReadableRepr(callee, true))) {
if (callee != null && ("sys.exit".equals(PyUtil.getReadableRepr(callee, true)) ||
"fail".equals(callee.getName()))) {
callee.accept(this);
for (PyExpression expression : node.getArguments()) {
expression.accept(this);
@@ -170,7 +170,7 @@ public class PythonLanguageLevelPusher implements FilePropertyPusher<LanguageLev
}
private static void setNoSizeLimitRecursive(VirtualFile file) {
file.putUserData(SingleRootFileViewProvider.ourNoSizeLimitKey, Boolean.TRUE);
SingleRootFileViewProvider.doNotCheckFileSizeLimit(file);
for (VirtualFile child : file.getChildren()) {
setNoSizeLimitRecursive(child);
}
@@ -180,4 +180,4 @@ public class PythonLanguageLevelPusher implements FilePropertyPusher<LanguageLev
FORCE_LANGUAGE_LEVEL = languageLevel;
pushLanguageLevel(project);
}
}
}
@@ -109,15 +109,17 @@ public class PyMoveClassOrFunctionDelegate extends MoveHandlerDelegate {
doMove(project, new PsiElement[] {element}, null, null);
return true;
}
if (element instanceof PsiNamedElement) {
return true;
}
return false;
}
@Nullable
private static PsiNamedElement getElementToMove(@NotNull PsiElement element) {
final PsiNamedElement result = PsiTreeUtil.getParentOfType(element, PsiNamedElement.class, false, PyClass.class, PyFunction.class);
if (result instanceof PyFunction && ((PyFunction)result).isTopLevel() ||
result instanceof PyClass && ((PyClass)result).isTopLevel()) {
return result;
if (element instanceof PyFunction && ((PyFunction)element).isTopLevel() ||
element instanceof PyClass && ((PyClass)element).isTopLevel()) {
return (PsiNamedElement)element;
}
return null;
}
@@ -26,16 +26,19 @@
<line>30</line>
<description>This code is unreachable</description>
</problem>
<problem>
<file>unreachable.py</file>
<line>36</line>
<description>This code is unreachable</description>
</problem>
<problem>
<file>unreachable.py</file>
<line>46</line>
<description>This code is unreachable</description>
</problem>
<problem>
<file>unreachable.py</file>
<line>69</line>
<description>This code is unreachable</description>
</problem>
</problems>
@@ -42,8 +42,18 @@ def f():
# PY-3869
def f(x):
try:
from foo import bar
from foo import bar #pass
except ImportError:
def bar(x):
return x
return bar(x)
return bar(x)
# PY-3919
def f(x):
try:
from foo import Bar #pass
except ImportError:
class Bar(object):
pass
return Bar()