Use union of types of members as iteration type for tuples

This commit is contained in:
Andrey Vlasovskikh
2014-05-27 19:32:26 +04:00
parent 06a130f93d
commit a1d93e0756
2 changed files with 15 additions and 0 deletions
@@ -386,6 +386,14 @@ public class PyTargetExpressionImpl extends PyPresentableElementImpl<PyTargetExp
}
}
}
else if (iterableType instanceof PyTupleType) {
final PyTupleType tupleType = (PyTupleType)iterableType;
final List<PyType> memberTypes = new ArrayList<PyType>();
for (int i = 0; i < tupleType.getElementCount(); i++) {
memberTypes.add(tupleType.getElementType(i));
}
return PyUnionType.union(memberTypes);
}
else if (iterableType instanceof PyUnionType) {
final Collection<PyType> members = ((PyUnionType)iterableType).getMembers();
final List<PyType> iterationTypes = new ArrayList<PyType>();
@@ -812,6 +812,13 @@ public class PyTypeTest extends PyTestCase {
" expr, foo = xs\n");
}
public void testTupleIterationType() {
doTest("int | str",
"xs = (1, 'a')\n" +
"for expr in xs:\n" +
" pass\n");
}
private static TypeEvalContext getTypeEvalContext(@NotNull PyExpression element) {
return TypeEvalContext.userInitiated(element.getContainingFile()).withTracing();
}