mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed second part of PY-2648, and PY-2649
This commit is contained in:
@@ -11,7 +11,6 @@ import com.intellij.util.SmartList;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.toolbox.FP;
|
||||
import com.jetbrains.python.toolbox.RepeatIterable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -162,8 +161,15 @@ public class PyAssignmentStatementImpl extends PyElementImpl implements PyAssign
|
||||
map.add(new Pair<PyExpression, PyExpression>(lhs_one, rhs));
|
||||
}
|
||||
else if (lhs_tuple != null && rhs_one != null) { // multiple LHS, single RHS: unpacking
|
||||
//for (PyExpression tuple_elt : lhs_tuple.getElements()) map.add(new Pair<PyExpression, PyExpression>(tuple_elt, rhs_one));
|
||||
map.addAll(FP.zipList(Arrays.asList(lhs_tuple.getElements()), new RepeatIterable<PyExpression>(rhs_one)));
|
||||
// PY-2648, PY-2649
|
||||
PyElementGenerator elementGenerator = PyElementGenerator.getInstance(rhs_one.getProject());
|
||||
int counter = 0;
|
||||
for (PyExpression tuple_elt : lhs_tuple.getElements()) {
|
||||
map.add(new Pair<PyExpression, PyExpression>(tuple_elt,
|
||||
elementGenerator.createExpressionFromText(rhs_one.getText() + "[" + counter + "]")));
|
||||
++counter;
|
||||
}
|
||||
// map.addAll(FP.zipList(Arrays.asList(lhs_tuple.getElements()), new RepeatIterable<PyExpression>(rhs_one)));
|
||||
}
|
||||
else if (lhs_tuple != null && rhs_tuple != null) { // multiple both sides: piecewise mapping
|
||||
map.addAll(FP.zipList(Arrays.asList(lhs_tuple.getElements()), Arrays.asList(rhs_tuple.getElements()), null, null));
|
||||
|
||||
@@ -1 +1,5 @@
|
||||
<dst1>a, <dst2>b = <src>some_tuple
|
||||
def returnTuple():
|
||||
return 5, 4
|
||||
|
||||
<dst1>a, <dst2>b = <src>returnTuple()
|
||||
<src1>returnTuple()[0], <src2>returnTuple()[1]
|
||||
@@ -122,7 +122,7 @@ public class PyAssignmentMappingTest extends LightMarkedTestCase {
|
||||
PsiElement dst = marks.get("<dst" + String.valueOf(i + 1) + ">").getParent(); // ident -> target expr
|
||||
assertTrue(dst instanceof PyTargetExpression);
|
||||
dsts[i] = dst;
|
||||
PsiElement src = marks.get("<src" + String.valueOf(i + 1) +">").getParent(); // ident -> target expr
|
||||
PsiElement src = marks.get("<src" + String.valueOf(i + 1) + ">").getParent(); // ident -> target expr
|
||||
assertTrue(src instanceof PyExpression);
|
||||
srcs[i] = src;
|
||||
}
|
||||
@@ -161,21 +161,28 @@ public class PyAssignmentMappingTest extends LightMarkedTestCase {
|
||||
public void testTupleUnpack() throws Exception {
|
||||
Map<String, PsiElement> marks = loadTest();
|
||||
final int DST_NUM = 2;
|
||||
assertEquals(DST_NUM+1, marks.size());
|
||||
assertEquals(DST_NUM+3, marks.size());
|
||||
PsiElement[] dsts = new PsiElement[DST_NUM];
|
||||
for (int i=0; i<DST_NUM; i+=1) {
|
||||
PsiElement dst = marks.get("<dst" + String.valueOf(i+1) +">").getParent(); // ident -> target expr
|
||||
assertTrue(dst instanceof PyTargetExpression);
|
||||
dsts[i] = dst;
|
||||
}
|
||||
PsiElement[] srcs = new PsiElement[DST_NUM];
|
||||
for (int i=0; i<DST_NUM; i+=1) {
|
||||
PsiElement src = marks.get("<src" + String.valueOf(i+1) +">").getParent().getParent().getParent(); // ident -> target expr
|
||||
assertTrue(src instanceof PyExpression);
|
||||
srcs[i] = src;
|
||||
}
|
||||
|
||||
PsiElement src = marks.get("<src>").getParent(); // ident -> target expr
|
||||
PyAssignmentStatement stmt = (PyAssignmentStatement)src.getParent();
|
||||
PyAssignmentStatement stmt = (PyAssignmentStatement)src.getParent().getParent();
|
||||
List<Pair<PyExpression, PyExpression>> mapping = stmt.getTargetsToValuesMapping();
|
||||
assertEquals(DST_NUM, mapping.size());
|
||||
for (int i=0; i<DST_NUM; i+=1) {
|
||||
Pair<PyExpression, PyExpression> pair = mapping.get(i);
|
||||
assertEquals(dsts[i], pair.getFirst());
|
||||
assertEquals(src, pair.getSecond());
|
||||
assertEquals(srcs[i].getText(), pair.getSecond().getText());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user