/*
* Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Business Objects nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* JavaModelTraverser.java
* Creation date: April 24, 2006
* By: Raymond Cypher
*/
package org.openquark.cal.internal.javamodel;
import java.util.List;
import org.openquark.cal.internal.javamodel.JavaExpression.ArrayAccess;
import org.openquark.cal.internal.javamodel.JavaExpression.ArrayCreationExpression;
import org.openquark.cal.internal.javamodel.JavaExpression.ArrayLength;
import org.openquark.cal.internal.javamodel.JavaExpression.Assignment;
import org.openquark.cal.internal.javamodel.JavaExpression.CastExpression;
import org.openquark.cal.internal.javamodel.JavaExpression.ClassInstanceCreationExpression;
import org.openquark.cal.internal.javamodel.JavaExpression.ClassLiteral;
import org.openquark.cal.internal.javamodel.JavaExpression.InstanceOf;
import org.openquark.cal.internal.javamodel.JavaExpression.LiteralWrapper;
import org.openquark.cal.internal.javamodel.JavaExpression.LocalName;
import org.openquark.cal.internal.javamodel.JavaExpression.LocalVariable;
import org.openquark.cal.internal.javamodel.JavaExpression.MethodVariable;
import org.openquark.cal.internal.javamodel.JavaExpression.PlaceHolder;
import org.openquark.cal.internal.javamodel.JavaExpression.JavaField.Instance;
import org.openquark.cal.internal.javamodel.JavaExpression.JavaField.Static;
import org.openquark.cal.internal.javamodel.JavaExpression.JavaField.This;
import org.openquark.cal.internal.javamodel.JavaExpression.OperatorExpression.Binary;
import org.openquark.cal.internal.javamodel.JavaExpression.OperatorExpression.Ternary;
import org.openquark.cal.internal.javamodel.JavaExpression.OperatorExpression.Unary;
import org.openquark.cal.internal.javamodel.JavaStatement.AssertStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.Block;
import org.openquark.cal.internal.javamodel.JavaStatement.ExpressionStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.IfThenElseStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.JavaDocComment;
import org.openquark.cal.internal.javamodel.JavaStatement.LabelledContinue;
import org.openquark.cal.internal.javamodel.JavaStatement.LineComment;
import org.openquark.cal.internal.javamodel.JavaStatement.LocalVariableDeclaration;
import org.openquark.cal.internal.javamodel.JavaStatement.MultiLineComment;
import org.openquark.cal.internal.javamodel.JavaStatement.ReturnStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.SwitchStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.SynchronizedMethodInvocation;
import org.openquark.cal.internal.javamodel.JavaStatement.ThrowStatement;
import org.openquark.cal.internal.javamodel.JavaStatement.UnconditionalLoop;
import org.openquark.cal.internal.javamodel.JavaStatement.SwitchStatement.DefaultCase;
import org.openquark.cal.internal.javamodel.JavaStatement.SwitchStatement.IntCaseGroup;
/**
* JavaModelTraverser is an implementation of the JavaModelVisitor which
* performs a pre-order traversal of the java model elements it visits.
* <p>
*
* This class is intended to be the base class of other visitors that need to
* traverse a java model. For example, a visitor that needs to obtain a list
* of all local variable declarations within a java model can be written as:
* <p>
*
* <pre><code>
* class LocalVarDeclarationExtractor extends JavaModelTraverser<Void, Void> {
*
* private java.util.Set localVarDeclarations = new java.util.HashSet();
*
* public Void visitLocalVariableDeclarationStatement(
* JavaStatement.LocalVariableDeclaration localVariableDeclaration,
* Void arg) {
*
* localVarDeclarations.add(localVariableDeclaration);
* return super.visitLocalVariableDeclarationStatement(localVariableDeclaration, arg);
* }
* }
* </code></pre>
*
* Note that the visitLocalVariableDeclarationStatement method contains a call to the
* supertype's implementation (in this case JavaModelTraverser's). The purpose
* of this call is to let the JavaModelTraverser's implementation continue
* on the traversal through the subtree of elements rooted at the java element
* being visited. When implementing a visitor for traversing java models, one
* could omit the call to the supertype's implementation <i>only if </i> it
* properly replaces the traversal logic contained in the supertype with its
* own.
* <p>
*
* In JavaModelTraverser, the argument supplied to the visit methods are
* ignored, and all methods return null as their return values. Subclasses of
* JavaModelTraverser are free to use the argument and return value for their
* own purposes, and the traversal logic in JavaModelTraverser will properly
* propagate the supplied arguments down to child elements.
* <p>
*
* Nonetheless, for a significant portion of the common cases, the state of the
* visitation can simply be kept as member variables within the visitor itself,
* thereby eliminating the need to use the argument and return value of the
* visit methods. In these scenarios, the recommended approach is to pass in
* null as the argument, and return null as the return value.
* <p>
*
* @author Raymond Cypher
*/
public class JavaModelTraverser<T, R> implements JavaModelVisitor<T, R> {
/**
* Flag used to indicate whether traversal should continue.
* derived classes can use this to halt traversal when a specific
* condition is met. For example a derived class which was trying to
* determine if a java model contained an if-then-else expression
* could halt traversal as soon as one was encountered.
*/
private boolean continueTraversal = true;
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitArrayAccessExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.ArrayAccess, java.lang.Object)
*/
public R visitArrayAccessExpression(final ArrayAccess arrayAccess, final T arg) {
if (continueTraversal) {
arrayAccess.getArrayReference().accept(this, arg);
}
if (continueTraversal) {
arrayAccess.getArrayIndex().accept(this, arg);
}
return null;
}
/** {@inheritDoc} */
public R visitArrayLengthExpression(final ArrayLength arrayLength, final T arg) {
if (continueTraversal) {
arrayLength.getArrayReference().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitArrayCreationExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.ArrayCreationExpression, java.lang.Object)
*/
public R visitArrayCreationExpression(
final ArrayCreationExpression arrayCreation, final T arg) {
for (int i = 0, n = arrayCreation.getNElementValues(); i < n && continueTraversal; ++i) {
arrayCreation.getElementValue(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitAssignmentExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.Assignment, java.lang.Object)
*/
public R visitAssignmentExpression(final Assignment assignment, final T arg) {
if (continueTraversal) {
assignment.getLeftHandSide().accept(this, arg);
}
if (continueTraversal) {
assignment.getValue().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitCastExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.CastExpression, java.lang.Object)
*/
public R visitCastExpression(final CastExpression cast, final T arg) {
if (continueTraversal) {
cast.getExpressionToCast().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitClassInstanceCreationExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.ClassInstanceCreationExpression, java.lang.Object)
*/
public R visitClassInstanceCreationExpression(
final ClassInstanceCreationExpression instanceCreation, final T arg) {
for (int i = 0, n = instanceCreation.getNArgs(); i < n && continueTraversal; ++i) {
instanceCreation.getArg(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitInstanceOfExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.InstanceOf, java.lang.Object)
*/
public R visitInstanceOfExpression(final InstanceOf instanceOf, final T arg) {
if (continueTraversal) {
instanceOf.getJavaExpression().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitInstanceFieldExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.JavaField.Instance, java.lang.Object)
*/
public R visitInstanceFieldExpression(final Instance instanceField,
final T arg) {
if (instanceField.getInstance() != null && continueTraversal) {
instanceField.getInstance().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitStaticFieldExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.JavaField.Static, java.lang.Object)
*/
public R visitStaticFieldExpression(final Static staticField, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitThisFieldExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.JavaField.This, java.lang.Object)
*/
public R visitThisFieldExpression(final This thisField, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLiteralWrapperExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.LiteralWrapper, java.lang.Object)
*/
public R visitLiteralWrapperExpression(final LiteralWrapper literalWrapper,
final T arg) {
return null;
}
/**
* {@inheritDoc}
*/
public R visitClassLiteralExpression(final ClassLiteral classLiteral, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLocalNameExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.LocalName, java.lang.Object)
*/
public R visitLocalNameExpression(final LocalName localName, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLocalVariableExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.LocalVariable, java.lang.Object)
*/
public R visitLocalVariableExpression(final LocalVariable localVariable,
final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitInstanceMethodInvocationExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.MethodInvocation.Instance, java.lang.Object)
*/
public R visitInstanceMethodInvocationExpression(
final org.openquark.cal.internal.javamodel.JavaExpression.MethodInvocation.Instance instanceInvocation,
final T arg) {
if (instanceInvocation.getInvocationTarget() != null && continueTraversal) {
instanceInvocation.getInvocationTarget().accept(this, arg);
}
for (int i = 0, n = instanceInvocation.getNArgs(); i < n && continueTraversal; ++i) {
instanceInvocation.getArg(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitStaticMethodInvocationExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.MethodInvocation.Static, java.lang.Object)
*/
public R visitStaticMethodInvocationExpression(
final org.openquark.cal.internal.javamodel.JavaExpression.MethodInvocation.Static staticInvocation,
final T arg) {
for (int i = 0, n = staticInvocation.getNArgs(); i < n && continueTraversal; ++i) {
staticInvocation.getArg(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitMethodVariableExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.MethodVariable, java.lang.Object)
*/
public R visitMethodVariableExpression(final MethodVariable methodVariable,
final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitBinaryOperatorExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.OperatorExpression.Binary, java.lang.Object)
*/
public R visitBinaryOperatorExpression(final Binary binaryOperator,
final T arg) {
if (continueTraversal) {
binaryOperator.getArgument(0).accept(this, arg);
}
if (continueTraversal) {
binaryOperator.getArgument(1).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitTernaryOperatorExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.OperatorExpression.Ternary, java.lang.Object)
*/
public R visitTernaryOperatorExpression(final Ternary ternaryOperator,
final T arg) {
if (continueTraversal) {
ternaryOperator.getArgument(0).accept(this, arg);
}
if (continueTraversal) {
ternaryOperator.getArgument(1).accept(this, arg);
}
if (continueTraversal) {
ternaryOperator.getArgument(2).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitUnaryOperatorExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.OperatorExpression.Unary, java.lang.Object)
*/
public R visitUnaryOperatorExpression(final Unary unaryOperator, final T arg) {
if (continueTraversal) {
unaryOperator.getArgument(0).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitPlaceHolderExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.PlaceHolder, java.lang.Object)
*/
public R visitPlaceHolderExpression(final PlaceHolder placeHolder, final T arg) {
if (placeHolder.getActualExpression() != null && continueTraversal) {
placeHolder.getActualExpression().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitAssertStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.AssertStatement, java.lang.Object)
*/
public R visitAssertStatement(final AssertStatement assertStatement,
final T arg) {
if (continueTraversal) {
assertStatement.getConditionExpr().accept(this, arg);
}
if (assertStatement.getOnFailureExpr() != null && continueTraversal) {
assertStatement.getOnFailureExpr().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitBlockStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.Block, java.lang.Object)
*/
public R visitBlockStatement(final Block block, final T arg) {
final List<JavaExceptionHandler> oldExceptionHandlers = block.getExceptionHandlers();
for (int i = 0, n = oldExceptionHandlers.size(); i < n && continueTraversal; ++i) {
oldExceptionHandlers.get(i).accept(this, arg);
}
for (int i = 0, n = block.getNBlockStatements(); i < n && continueTraversal; ++i) {
block.getNthBlockStatement(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitExpressionStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.ExpressionStatement, java.lang.Object)
*/
public R visitExpressionStatement(
final ExpressionStatement expressionStatement, final T arg) {
if (continueTraversal) {
expressionStatement.getJavaExpression().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitIfThenElseStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.IfThenElseStatement, java.lang.Object)
*/
public R visitIfThenElseStatement(final IfThenElseStatement ifThenElse,
final T arg) {
if (continueTraversal) {
ifThenElse.getCondition().accept (this, arg);
}
if (continueTraversal) {
ifThenElse.getThenStatement().accept(this, arg);
}
if (ifThenElse.getElseStatement() != null && continueTraversal) {
ifThenElse.getElseStatement().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLabelledContinueStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.LabelledContinue, java.lang.Object)
*/
public R visitLabelledContinueStatement(
final LabelledContinue labelledContinue, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLineCommentStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.LineComment, java.lang.Object)
*/
public R visitLineCommentStatement(final LineComment lineComment, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitMultiLineCommentStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.MultiLineComment, java.lang.Object)
*/
public R visitMultiLineCommentStatement(final MultiLineComment lineComment, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaDocCommentStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.JavaDocComment, java.lang.Object)
*/
public R visitJavaDocCommentStatement(
final JavaStatement.JavaDocComment comment, final T arg) {
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitLocalVariableDeclarationStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.LocalVariableDeclaration, java.lang.Object)
*/
public R visitLocalVariableDeclarationStatement(
final LocalVariableDeclaration localVariableDeclaration, final T arg) {
if (continueTraversal) {
localVariableDeclaration.getLocalVariable().accept(this, arg);
}
if (localVariableDeclaration.getInitializer() != null && continueTraversal) {
localVariableDeclaration.getInitializer().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitReturnStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.ReturnStatement, java.lang.Object)
*/
public R visitReturnStatement(final ReturnStatement returnStatement,
final T arg) {
if (returnStatement.getReturnExpression() != null && continueTraversal) {
returnStatement.getReturnExpression().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitSwitchStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.SwitchStatement, java.lang.Object)
*/
public R visitSwitchStatement(final SwitchStatement switchStatement,
final T arg) {
if (continueTraversal) {
switchStatement.getCondition().accept(this, arg);
}
if (switchStatement.getDefaultStatement() != null && continueTraversal) {
switchStatement.getDefaultStatement().accept(this, arg);
}
final List<IntCaseGroup> cases = switchStatement.getCaseGroups();
for (int i = 0, n = cases.size(); i < n && continueTraversal; ++i) {
cases.get(i).accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitDefaultCase(org.openquark.cal.internal.runtime.lecc.JavaStatement.SwitchStatement.DefaultCase, java.lang.Object)
*/
public R visitDefaultCase(final DefaultCase defaultCase, final T arg) {
if (continueTraversal) {
defaultCase.getStatement().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitIntCaseGroup(org.openquark.cal.internal.runtime.lecc.JavaStatement.SwitchStatement.IntCaseGroup, java.lang.Object)
*/
public R visitIntCaseGroup(final IntCaseGroup intCaseGroup, final T arg) {
if (continueTraversal) {
intCaseGroup.getStatement().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitSynchronizedMethodInvocationStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.SynchronizedMethodInvocation, java.lang.Object)
*/
public R visitSynchronizedMethodInvocationStatement(
final SynchronizedMethodInvocation synchronizedInvocation, final T arg) {
if (continueTraversal) {
synchronizedInvocation.getMethodInvocation().accept(this, arg);
}
if (continueTraversal) {
synchronizedInvocation.getSynchronizingObject().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitThrowStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.ThrowStatement, java.lang.Object)
*/
public R visitThrowStatement(final ThrowStatement throwStatement, final T arg) {
if (continueTraversal) {
throwStatement.getThrownExpression().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitUnconditonalLoop(org.openquark.cal.internal.runtime.lecc.JavaStatement.UnconditionalLoop, java.lang.Object)
*/
public R visitUnconditonalLoop(final UnconditionalLoop unconditionalLoop,
final T arg) {
if (continueTraversal) {
unconditionalLoop.getBody().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaExceptionHandler(org.openquark.cal.internal.runtime.lecc.JavaExceptionHandler, java.lang.Object)
*/
public R visitJavaExceptionHandler(
final JavaExceptionHandler exceptionHandler, final T arg) {
if (continueTraversal) {
exceptionHandler.getHandlerCode().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaClassRep(org.openquark.cal.internal.runtime.lecc.JavaClassRep, java.lang.Object)
*/
public R visitJavaClassRep(final JavaClassRep classRep, final T arg) {
for (int i = 0, n = classRep.getNFieldDeclarations(); i < n && continueTraversal; ++i) {
final JavaFieldDeclaration fieldDeclaration = classRep.getFieldDeclaration(i);
fieldDeclaration.accept(this, arg);
}
for (int i = 0, n = classRep.getNConstructors(); i < n && continueTraversal; ++i) {
final JavaConstructor javaConstructor = classRep.getConstructor(i);
javaConstructor.accept(this, arg);
}
for (int i = 0, n = classRep.getNMethods(); i < n && continueTraversal; ++i) {
final JavaMethod method = classRep.getMethod(i);
method.accept(this, arg);
}
for (int i = 0, n = classRep.getNInnerClasses(); i < n && continueTraversal; ++i) {
final JavaClassRep innerClass = classRep.getInnerClass(i);
innerClass.accept(this, arg);
}
final JavaDocComment jdc = classRep.getJavaDoc();
if (jdc != null && continueTraversal) {
jdc.accept(this, arg);
}
final MultiLineComment mlc = classRep.getComment();
if (mlc != null && continueTraversal) {
mlc.accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaFieldDeclaration(org.openquark.cal.internal.runtime.lecc.JavaFieldDeclaration, java.lang.Object)
*/
public R visitJavaFieldDeclaration(
final JavaFieldDeclaration fieldDeclaration, final T arg) {
if (fieldDeclaration.getInitializer() != null && continueTraversal) {
fieldDeclaration.getInitializer().accept(this, arg);
}
if (fieldDeclaration.getJavaDoc() != null && continueTraversal) {
fieldDeclaration.getJavaDoc().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaConstructor(org.openquark.cal.internal.runtime.lecc.JavaConstructor, java.lang.Object)
*/
public R visitJavaConstructor(final JavaConstructor javaConstructor,
final T arg) {
if (continueTraversal) {
javaConstructor.getBodyCode().accept(this, arg);
}
return null;
}
/* (non-Javadoc)
* @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitJavaMethod(org.openquark.cal.internal.runtime.lecc.JavaMethod, java.lang.Object)
*/
public R visitJavaMethod(final JavaMethod javaMethod, final T arg) {
if (continueTraversal) {
if (javaMethod.getJavaDocComment() != null) {
javaMethod.getJavaDocComment().accept(this, arg);
}
javaMethod.getBodyCode().accept(this, arg);
}
return null;
}
/**
* @return the state of the continueTraversal flag.
*/
protected final boolean getContinueTraversal () {
return continueTraversal;
}
/**
* @param b the new value for the continueTraversal flag.
*/
protected final void setContinueTraversal (final boolean b) {
continueTraversal = b;
}
}