in projectional/src/main/java/jetbrains/jetpad/projectional/binOp/BinOpTransformer.java [82:105]
public BinExprT balanceUp(BinExprT expr) {
ExprT parent = parent(expr);
if (!isBinOp(parent)) return expr;
BinExprT parentNode = asBinOp(parent);
int parentPriority = getPriority(parentNode);
int exprPriority = getPriority(expr);
Associativity assoc = getAssociativity(parentNode);
if (isLeftChild(expr) && (
(assoc == Associativity.LEFT && parentPriority > exprPriority) ||
(assoc == Associativity.RIGHT && parentPriority >= exprPriority))) {
return balanceUp(rotateRight(parentNode));
}
if (isRightChild(expr) && (
(assoc == Associativity.LEFT && parentPriority >= exprPriority) ||
(assoc == Associativity.RIGHT && parentPriority > exprPriority))) {
return balanceUp(rotateLeft(parentNode));
}
return expr;
}