/
NikolayIvkin
/
sqlancer2
Обзор
Документация
Войти
/
NikolayIvkin
/
sqlancer2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/sqlancer/common/visitor/ToStringVisitor.java
74 строки
2 KB
Manuel Rigger
Introduce a new sqlancer.common package
13 авг 2020, 00:31
13 авг 2020, 00:31
cb1ba25
Код
Авторство
О чём код?
package sqlancer.common.visitor; import java.util.List; import sqlancer.common.visitor.UnaryOperation.OperatorKind; public abstract class ToStringVisitor<T> extends NodeVisitor<T> { protected final StringBuilder sb = new StringBuilder(); public void visit(BinaryOperation<T> op) { sb.append('('); sb.append('('); visit(op.getLeft()); sb.append(')'); sb.append(op.getOperatorRepresentation()); sb.append('('); visit(op.getRight()); sb.append(')'); sb.append(')'); } public void visit(UnaryOperation<T> op) { if (!op.omitBracketsWhenPrinting()) { sb.append('('); } if (op.getOperatorKind() == OperatorKind.PREFIX) { sb.append(op.getOperatorRepresentation()); sb.append(' '); } if (!op.omitBracketsWhenPrinting()) { sb.append('('); } visit(op.getExpression()); if (!op.omitBracketsWhenPrinting()) { sb.append(')'); } if (op.getOperatorKind() == OperatorKind.POSTFIX) { sb.append(' '); sb.append(op.getOperatorRepresentation()); } if (!op.omitBracketsWhenPrinting()) { sb.append(')'); } } @SuppressWarnings("unchecked") public void visit(T expr) { assert expr != null; if (expr instanceof BinaryOperation<?>) { visit((BinaryOperation<T>) expr); } else if (expr instanceof UnaryOperation<?>) { visit((UnaryOperation<T>) expr); } else { visitSpecific(expr); } } public abstract void visitSpecific(T expr); public void visit(List<T> expressions) { for (int i = 0; i < expressions.size(); i++) { if (i != 0) { sb.append(", "); } visit(expressions.get(i)); } } public String get() { return sb.toString(); } }