Skip to content
Prev Previous commit
Next Next commit
Simplify ExpressionPrinter
  • Loading branch information
rcosta358 committed Apr 1, 2026
commit f455e9705032728919350d235f88f1eac3837cd8
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package liquidjava.rj_language.ast.prettyprinting;

import java.util.List;
import java.util.stream.Collectors;

import liquidjava.rj_language.ast.AliasInvocation;
Expand Down Expand Up @@ -41,34 +42,28 @@ private String render(Expression expression) {
return expression.accept(this);
}

private String renderChild(Expression child) {
private String renderWithOptionalParentheses(Expression child, boolean shouldWrap) {
if (shouldWrap)
return "(" + render(child) + ")";
if (child instanceof GroupExpression group)
return "(" + render(group.getExpression()) + ")";
return render(child);
}

private String renderOperand(Expression parent, Expression child) {
if (needsParentheses(parent, child))
return "(" + render(child) + ")";
return renderChild(child);
return renderWithOptionalParentheses(child, needsParentheses(parent, child));
}

private String renderRightOperand(BinaryExpression parent, Expression child) {
if (needsRightParentheses(parent, child))
return "(" + render(child) + ")";
return renderChild(child);
return renderWithOptionalParentheses(child, needsRightParentheses(parent, child));
}

private String renderConditionOperand(Expression child) {
if (child instanceof Ite)
return "(" + render(child) + ")";
return renderChild(child);
return renderWithOptionalParentheses(child, child instanceof Ite);
}

private boolean needsParentheses(Expression parent, Expression child) {
if (precedence(child).isLowerThan(precedence(parent)))
return true;
return false;
return precedence(child).isLowerThan(precedence(parent));
}

private boolean needsRightParentheses(BinaryExpression parent, Expression child) {
Expand Down Expand Up @@ -114,8 +109,7 @@ private boolean isAssociative(String operator) {

@Override
public String visitAliasInvocation(AliasInvocation alias) {
return alias.getName() + "(" + alias.getArgs().stream().map(this::renderChild).collect(Collectors.joining(", "))
+ ")";
return alias.getName() + "(" + renderArguments(alias.getArgs(), ", ") + ")";
}

@Override
Expand All @@ -126,8 +120,7 @@ public String visitBinaryExpression(BinaryExpression exp) {

@Override
public String visitFunctionInvocation(FunctionInvocation fun) {
return Utils.getSimpleName(fun.getName()) + "("
+ fun.getArgs().stream().map(this::renderChild).collect(Collectors.joining(",")) + ")";
return Utils.getSimpleName(fun.getName()) + "(" + renderArguments(fun.getArgs(), ",") + ")";
}

@Override
Expand Down Expand Up @@ -180,4 +173,9 @@ public String visitUnaryExpression(UnaryExpression exp) {
public String visitVar(Var var) {
return VariableFormatter.format(var.getName());
}

private String renderArguments(List<Expression> args, String separator) {
return args.stream().map(expression -> renderWithOptionalParentheses(expression, false))
.collect(Collectors.joining(separator));
}
}
Loading