org.eclipse.ocl.examples.pivot.evaluation
Class EvaluationVisitorDecorator

java.lang.Object
  extended by org.eclipse.ocl.examples.pivot.util.AbstractVisitor<R,C>
      extended by org.eclipse.ocl.examples.pivot.util.AbstractExtendingVisitor<Value,java.lang.Object>
          extended by org.eclipse.ocl.examples.pivot.evaluation.EvaluationVisitorDecorator
All Implemented Interfaces:
EvaluationVisitor, Visitor<Value,java.lang.Object>
Direct Known Subclasses:
TracingEvaluationVisitor

public abstract class EvaluationVisitorDecorator
extends AbstractExtendingVisitor<Value,java.lang.Object>
implements EvaluationVisitor

A visitor that decorates another EvaluationVisitor, to intercept invocations of the visitXxx(...) methods. By default, every visitation is simply delegated to the decorated visitor. Subclasses may extend these delegations with any additional behaviour that is required, even replacing calls to the delegate where necessary.

This class works together with the AbstractEvaluationVisitor to ensure that recursive visitXxx() calls are correctly intercepted by me (and not just implemented within the decorated visitor). Moreover, this works with decorators nested to any depth.

Author:
Christian W. Damus (cdamus)

Field Summary
 
Fields inherited from class org.eclipse.ocl.examples.pivot.util.AbstractVisitor
context
 
Constructor Summary
protected EvaluationVisitorDecorator(EvaluationVisitor decorated)
           
 
Method Summary
 EvaluationVisitor createNestedVisitor()
          Delegates to my decorated visitor.
protected  EvaluationVisitor getDelegate()
          Obtains the visitor that I decorate.
 Environment getEnvironment()
          Obtains my delegate's environment.
 EvaluationEnvironment getEvaluationEnvironment()
          Obtains my delegate's evaluation environment.
 ModelManager getModelManager()
          Obtains my delegate's extent map.
 void setUndecoratedVisitor(EvaluationVisitor evaluationVisitor)
          Delegates to my decorated visitor.
 Value visitAssociationClassCallExp(AssociationClassCallExp callExp)
          Delegates to my decorated visitor.
 Value visitBooleanLiteralExp(BooleanLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitCollectionItem(CollectionItem item)
          Delegates to my decorated visitor.
 Value visitCollectionLiteralExp(CollectionLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitCollectionRange(CollectionRange range)
          Delegates to my decorated visitor.
 Value visitConstraint(Constraint constraint)
          Delegates to my decorated visitor.
 Value visitEnumLiteralExp(EnumLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitExpressionInOcl(ExpressionInOcl expression)
          Delegates to my decorated visitor.
 Value visitIfExp(IfExp ifExp)
          Delegates to my decorated visitor.
 Value visiting(Visitable visitable)
          Delegates to my decorated visitor.
 Value visitIntegerLiteralExp(IntegerLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitInvalidLiteralExp(InvalidLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitLetExp(LetExp letExp)
          Delegates to my decorated visitor.
 Value visitMessageExp(MessageExp messageExp)
          Delegates to my decorated visitor.
 Value visitNullLiteralExp(NullLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitOperationCallExp(OperationCallExp callExp)
          Delegates to my decorated visitor.
 Value visitPropertyCallExp(PropertyCallExp callExp)
          Delegates to my decorated visitor.
 Value visitRealLiteralExp(RealLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitStateExp(StateExp stateExp)
          Delegates to my decorated visitor.
 Value visitStringLiteralExp(StringLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitTupleLiteralExp(TupleLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitTupleLiteralPart(TupleLiteralPart part)
          Delegates to my decorated visitor.
 Value visitTypeExp(TypeExp typeExp)
          Delegates to my decorated visitor.
 Value visitUnlimitedNaturalLiteralExp(UnlimitedNaturalLiteralExp literalExp)
          Delegates to my decorated visitor.
 Value visitUnspecifiedValueExp(UnspecifiedValueExp unspecExp)
          Delegates to my decorated visitor.
 Value visitVariable(Variable variable)
          Delegates to my decorated visitor.
 Value visitVariableExp(VariableExp variableExp)
          Delegates to my decorated visitor.
 
Methods inherited from class org.eclipse.ocl.examples.pivot.util.AbstractExtendingVisitor
visitAnnotation, visitAnyType, visitAssociationClass, visitBagType, visitCallExp, visitCallOperationAction, visitClass, visitClassifierType, visitCollectionLiteralPart, visitCollectionType, visitComment, visitDataType, visitDetail, visitElement, visitEnumeration, visitEnumerationLiteral, visitFeature, visitFeatureCallExp, visitInvalidType, visitIterateExp, visitIteration, visitIteratorExp, visitLambdaType, visitLibrary, visitLiteralExp, visitLoopExp, visitMessageType, visitMonikeredElement, visitMultiplicityElement, visitNamedElement, visitNamespace, visitNavigationCallExp, visitNumericLiteralExp, visitOclExpression, visitOpaqueExpression, visitOperation, visitOperationTemplateParameter, visitOrderedSetType, visitPackage, visitPackageableElement, visitParameter, visitParameterableElement, visitPrecedence, visitPrimitiveLiteralExp, visitPrimitiveType, visitProperty, visitSendSignalAction, visitSequenceType, visitSetType, visitSignal, visitState, visitTemplateableElement, visitTemplateBinding, visitTemplateParameter, visitTemplateParameterSubstitution, visitTemplateParameterType, visitTemplateSignature, visitTupleType, visitType, visitTypedElement, visitTypedMultiplicityElement, visitTypeTemplateParameter, visitUnspecifiedType, visitValueSpecification, visitVariableDeclaration, visitVoidType
 
Methods inherited from class org.eclipse.ocl.examples.pivot.util.AbstractVisitor
getAdapter, safeVisit, visit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.eclipse.ocl.examples.pivot.evaluation.EvaluationVisitor
getTypeManager, getValueFactory, throwInvalidEvaluation, throwInvalidEvaluation, throwInvalidEvaluation
 
Methods inherited from interface org.eclipse.ocl.examples.pivot.util.Visitor
getAdapter, visitAnnotation, visitAnyType, visitAssociationClass, visitBagType, visitCallExp, visitCallOperationAction, visitClass, visitClassifierType, visitCollectionLiteralPart, visitCollectionType, visitComment, visitDataType, visitDetail, visitElement, visitEnumeration, visitEnumerationLiteral, visitFeature, visitFeatureCallExp, visitInvalidType, visitIterateExp, visitIteration, visitIteratorExp, visitLambdaType, visitLibrary, visitLiteralExp, visitLoopExp, visitMessageType, visitMonikeredElement, visitMultiplicityElement, visitNamedElement, visitNamespace, visitNavigationCallExp, visitNumericLiteralExp, visitOclExpression, visitOpaqueExpression, visitOperation, visitOperationTemplateParameter, visitOrderedSetType, visitPackage, visitPackageableElement, visitParameter, visitParameterableElement, visitPrecedence, visitPrimitiveLiteralExp, visitPrimitiveType, visitProperty, visitSendSignalAction, visitSequenceType, visitSetType, visitSignal, visitState, visitTemplateableElement, visitTemplateBinding, visitTemplateParameter, visitTemplateParameterSubstitution, visitTemplateParameterType, visitTemplateSignature, visitTupleType, visitType, visitTypedElement, visitTypedMultiplicityElement, visitTypeTemplateParameter, visitUnspecifiedType, visitValueSpecification, visitVariableDeclaration, visitVoidType
 

Constructor Detail

EvaluationVisitorDecorator

protected EvaluationVisitorDecorator(EvaluationVisitor decorated)
Method Detail

createNestedVisitor

public EvaluationVisitor createNestedVisitor()
Delegates to my decorated visitor.

Specified by:
createNestedVisitor in interface EvaluationVisitor

getDelegate

protected final EvaluationVisitor getDelegate()
Obtains the visitor that I decorate.

Returns:
my decorated visitor

getEnvironment

public Environment getEnvironment()
Obtains my delegate's environment.

Specified by:
getEnvironment in interface EvaluationVisitor
Returns:
the environment

getEvaluationEnvironment

public EvaluationEnvironment getEvaluationEnvironment()
Obtains my delegate's evaluation environment.

Specified by:
getEvaluationEnvironment in interface EvaluationVisitor
Returns:
the evaluation environment

getModelManager

public ModelManager getModelManager()
Obtains my delegate's extent map.

Specified by:
getModelManager in interface EvaluationVisitor
Returns:
the model manager

setUndecoratedVisitor

public void setUndecoratedVisitor(EvaluationVisitor evaluationVisitor)
Delegates to my decorated visitor.

Specified by:
setUndecoratedVisitor in interface EvaluationVisitor

visitConstraint

public Value visitConstraint(Constraint constraint)
Delegates to my decorated visitor.

Specified by:
visitConstraint in interface Visitor<Value,java.lang.Object>
Overrides:
visitConstraint in class AbstractExtendingVisitor<Value,java.lang.Object>

visitAssociationClassCallExp

public Value visitAssociationClassCallExp(AssociationClassCallExp callExp)
Delegates to my decorated visitor.

Specified by:
visitAssociationClassCallExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitAssociationClassCallExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitBooleanLiteralExp

public Value visitBooleanLiteralExp(BooleanLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitBooleanLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitBooleanLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitCollectionItem

public Value visitCollectionItem(CollectionItem item)
Delegates to my decorated visitor.

Specified by:
visitCollectionItem in interface Visitor<Value,java.lang.Object>
Overrides:
visitCollectionItem in class AbstractExtendingVisitor<Value,java.lang.Object>

visitCollectionLiteralExp

public Value visitCollectionLiteralExp(CollectionLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitCollectionLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitCollectionLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitCollectionRange

public Value visitCollectionRange(CollectionRange range)
Delegates to my decorated visitor.

Specified by:
visitCollectionRange in interface Visitor<Value,java.lang.Object>
Overrides:
visitCollectionRange in class AbstractExtendingVisitor<Value,java.lang.Object>

visitEnumLiteralExp

public Value visitEnumLiteralExp(EnumLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitEnumLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitEnumLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitExpressionInOcl

public Value visitExpressionInOcl(ExpressionInOcl expression)
Delegates to my decorated visitor.

Specified by:
visitExpressionInOcl in interface Visitor<Value,java.lang.Object>
Overrides:
visitExpressionInOcl in class AbstractExtendingVisitor<Value,java.lang.Object>

visitIfExp

public Value visitIfExp(IfExp ifExp)
Delegates to my decorated visitor.

Specified by:
visitIfExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitIfExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitIntegerLiteralExp

public Value visitIntegerLiteralExp(IntegerLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitIntegerLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitIntegerLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitInvalidLiteralExp

public Value visitInvalidLiteralExp(InvalidLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitInvalidLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitInvalidLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitLetExp

public Value visitLetExp(LetExp letExp)
Delegates to my decorated visitor.

Specified by:
visitLetExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitLetExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitMessageExp

public Value visitMessageExp(MessageExp messageExp)
Delegates to my decorated visitor.

Specified by:
visitMessageExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitMessageExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitNullLiteralExp

public Value visitNullLiteralExp(NullLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitNullLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitNullLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitOperationCallExp

public Value visitOperationCallExp(OperationCallExp callExp)
Delegates to my decorated visitor.

Specified by:
visitOperationCallExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitOperationCallExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitPropertyCallExp

public Value visitPropertyCallExp(PropertyCallExp callExp)
Delegates to my decorated visitor.

Specified by:
visitPropertyCallExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitPropertyCallExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitRealLiteralExp

public Value visitRealLiteralExp(RealLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitRealLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitRealLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitStateExp

public Value visitStateExp(StateExp stateExp)
Delegates to my decorated visitor.

Specified by:
visitStateExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitStateExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitStringLiteralExp

public Value visitStringLiteralExp(StringLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitStringLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitStringLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitTupleLiteralExp

public Value visitTupleLiteralExp(TupleLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitTupleLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitTupleLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitTupleLiteralPart

public Value visitTupleLiteralPart(TupleLiteralPart part)
Delegates to my decorated visitor.

Specified by:
visitTupleLiteralPart in interface Visitor<Value,java.lang.Object>
Overrides:
visitTupleLiteralPart in class AbstractExtendingVisitor<Value,java.lang.Object>

visitTypeExp

public Value visitTypeExp(TypeExp typeExp)
Delegates to my decorated visitor.

Specified by:
visitTypeExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitTypeExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitUnlimitedNaturalLiteralExp

public Value visitUnlimitedNaturalLiteralExp(UnlimitedNaturalLiteralExp literalExp)
Delegates to my decorated visitor.

Specified by:
visitUnlimitedNaturalLiteralExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitUnlimitedNaturalLiteralExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitUnspecifiedValueExp

public Value visitUnspecifiedValueExp(UnspecifiedValueExp unspecExp)
Delegates to my decorated visitor.

Specified by:
visitUnspecifiedValueExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitUnspecifiedValueExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visitVariable

public Value visitVariable(Variable variable)
Delegates to my decorated visitor.

Specified by:
visitVariable in interface Visitor<Value,java.lang.Object>
Overrides:
visitVariable in class AbstractExtendingVisitor<Value,java.lang.Object>

visitVariableExp

public Value visitVariableExp(VariableExp variableExp)
Delegates to my decorated visitor.

Specified by:
visitVariableExp in interface Visitor<Value,java.lang.Object>
Overrides:
visitVariableExp in class AbstractExtendingVisitor<Value,java.lang.Object>

visiting

public Value visiting(Visitable visitable)
Delegates to my decorated visitor.

Specified by:
visiting in interface Visitor<Value,java.lang.Object>