public BinExprT balanceDown()

in projectional/src/main/java/jetbrains/jetpad/projectional/binOp/BinOpTransformer.java [152:183]


  public BinExprT balanceDown(BinExprT expr) {
    int exprPriority = getPriority(expr);
    Associativity assoc = getAssociativity(expr);
    ExprT left = left(expr).get();
    ExprT right = right(expr).get();

    if (isBinOp(left)) {
      BinExprT leftExpr = asBinOp(left);
      int leftPriority = getPriority(leftExpr);

      if ((assoc == Associativity.LEFT && leftPriority < exprPriority) ||
          (assoc == Associativity.RIGHT && leftPriority <= exprPriority)) {
        BinExprT result = rotateRight(expr);
        balanceDown(asBinOp(right(result).get()));
        return result;
      }
    }

    if (isBinOp(right)) {
      BinExprT rightExpr = asBinOp(right);
      int rightPriority = getPriority(rightExpr);

      if ((assoc == Associativity.LEFT && rightPriority <= exprPriority) ||
          (assoc == Associativity.RIGHT && rightPriority < exprPriority)) {
        BinExprT result = rotateLeft(expr);
        balanceDown(asBinOp(left(result).get()));
        return result;
      }
    }

    return expr;
  }