public BinExprT balanceUp()

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;
  }