blob: baee3786f8fa48922d33f9b5da75739a8b6fca85 [file] [log] [blame]
package org.checkerframework.dataflow.expression;
/**
* A simple visitor for {@link JavaExpression}.
*
* @param <R> the return type of the visit methods
* @param <P> the parameter passed to the visit methods
*/
public abstract class JavaExpressionVisitor<R, P> {
/**
* Visits the given {@code javaExpr}.
*
* @param javaExpr the expression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the expression
*/
public R visit(JavaExpression javaExpr, P p) {
return javaExpr.accept(this, p);
}
/**
* Visit an {@link ArrayAccess}.
*
* @param arrayAccessExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code arrayAccessExpr}
*/
protected abstract R visitArrayAccess(ArrayAccess arrayAccessExpr, P p);
/**
* Visit an {@link ArrayCreation}.
*
* @param arrayCreationExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code arrayCreationExpr}
*/
protected abstract R visitArrayCreation(ArrayCreation arrayCreationExpr, P p);
/**
* Visit a {@link BinaryOperation}.
*
* @param binaryOpExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code binaryOpExpr}
*/
protected abstract R visitBinaryOperation(BinaryOperation binaryOpExpr, P p);
/**
* Visit a {@link ClassName}.
*
* @param classNameExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code classNameExpr}
*/
protected abstract R visitClassName(ClassName classNameExpr, P p);
/**
* Visit a {@link FieldAccess}.
*
* @param fieldAccessExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code fieldAccessExpr}
*/
protected abstract R visitFieldAccess(FieldAccess fieldAccessExpr, P p);
/**
* Visit a {@link FormalParameter}.
*
* @param parameterExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code parameterExpr}
*/
protected abstract R visitFormalParameter(FormalParameter parameterExpr, P p);
/**
* Visit a {@link LocalVariable}.
*
* @param localVarExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code localVarExpr}
*/
protected abstract R visitLocalVariable(LocalVariable localVarExpr, P p);
/**
* Visit a {@link MethodCall}.
*
* @param methodCallExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code methodCallExpr}
*/
protected abstract R visitMethodCall(MethodCall methodCallExpr, P p);
/**
* Visit a {@link ThisReference}.
*
* @param thisExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code thisExpr}
*/
protected abstract R visitThisReference(ThisReference thisExpr, P p);
/**
* Visit an {@link UnaryOperation}.
*
* @param unaryOpExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code unaryOpExpr}
*/
protected abstract R visitUnaryOperation(UnaryOperation unaryOpExpr, P p);
/**
* Visit an {@link Unknown}.
*
* @param unknownExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code unknownExpr}
*/
protected abstract R visitUnknown(Unknown unknownExpr, P p);
/**
* Visit a {@link ValueLiteral}.
*
* @param literalExpr the JavaExpression to visit
* @param p the parameter to pass to the visit method
* @return the result of visiting the {@code literalExpr}
*/
protected abstract R visitValueLiteral(ValueLiteral literalExpr, P p);
}