PY-24445 Fixed: False positive: PyCharm ignores issubclass check inside list comprehension

Update PyControlFlowBuilder to use PyTypeAssertionEvaluator while visiting if-components inside comprehensions.
This commit is contained in:
Semyon Proshev
2017-06-20 11:34:51 +03:00
parent 0db3c6ef81
commit 59a909ff25
2 changed files with 16 additions and 0 deletions
@@ -730,7 +730,10 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor {
else {
myBuilder.startNode(condition);
}
final PyTypeAssertionEvaluator assertionEvaluator = new PyTypeAssertionEvaluator();
condition.accept(this);
condition.accept(assertionEvaluator);
InstructionBuilder.addAssertInstructions(myBuilder, assertionEvaluator);
// Condition is true for nested "for" and "if" constructs, next startNode() should create a conditional node
prevCondition = condition;
@@ -595,6 +595,19 @@ public class Py3TypeTest extends PyTestCase {
);
}
// PY-24445
public void testIsSubclassInsideListComprehension() {
doTest("List[Type[A]]",
"class A: pass\n" +
"expr = [e for e in [] if issubclass(e, A)]");
}
public void testIsInstanceInsideListComprehension() {
doTest("List[A]",
"class A: pass\n" +
"expr = [e for e in [] if isinstance(e, A)]");
}
private void doTest(final String expectedType, final String text) {
myFixture.configureByText(PythonFileType.INSTANCE, text);
final PyExpression expr = myFixture.findElementByText("expr", PyExpression.class);