org.eclipse.ocl.examples.pivot.manager
Class TemplateParameterSubstitutionVisitor

java.lang.Object
  extended by org.eclipse.ocl.examples.pivot.util.AbstractVisitor<R,C>
      extended by org.eclipse.ocl.examples.pivot.util.AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>
          extended by org.eclipse.ocl.examples.pivot.manager.TemplateParameterSubstitutionVisitor
All Implemented Interfaces:
Visitor<java.lang.Object>

public class TemplateParameterSubstitutionVisitor
extends AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

A TemplateParameterSubstitutionVisitor traverses a CallExp to identify the formal/actual TemplateParameterSubstitutions associated with that CallExp. This creates a mapping from each formal template parameter to a list of actual types that correspond. This mapping can then be used to crteate new specializations.

The visitor should be constructed with a MetaModelManager in case any synthetic types need contructing, and the identity of the self type incase one of the substitutions uses OclSelf.


Field Summary
 
Fields inherited from class org.eclipse.ocl.examples.pivot.util.AbstractVisitor
context
 
Constructor Summary
TemplateParameterSubstitutionVisitor(MetaModelManager metaModelManager, Type selfType)
           
 
Method Summary
 DomainType specialize(TemplateableElement templateableElement)
           
 DomainType specialize(TemplateParameter templateParameter)
           
 java.lang.String toString()
           
protected  void visit(TypedElement formalElement, DomainTypedElement actualElement)
           
protected  void visit(Type newFormal, DomainType newActual)
           
protected  void visit(Type formalType, DomainTypedElement actualElement)
           
protected  void visitAllTypedElements(java.util.List<? extends TypedElement> formalElements, java.util.List<? extends DomainTypedElement> actualElements)
           
protected  void visitAllTypes(java.util.List<? extends Type> formalElements, java.util.List<? extends DomainType> actualElements)
           
 java.lang.Object visitClass(Class object)
           
 java.lang.Object visitCollectionType(CollectionType object)
           
 java.lang.String visiting(Visitable visitable)
          Return the result of visiting a visitable for which no more specific pivot type method is available.
 java.lang.Object visitIterateExp(IterateExp object)
           
 java.lang.Object visitIteratorExp(IteratorExp object)
           
 java.lang.Object visitLambdaType(LambdaType object)
           
 java.lang.Object visitMetaclass(Metaclass object)
           
 java.lang.Object visitOperationCallExp(OperationCallExp object)
           
 java.lang.Object visitPrimitiveType(PrimitiveType object)
           
 java.lang.Object visitPropertyCallExp(PropertyCallExp object)
           
 java.lang.Object visitSelfType(SelfType object)
           
 java.lang.Object visitTemplateParameter(TemplateParameter object)
           
 java.lang.Object visitTupleType(TupleType object)
           
 java.lang.Object visitType(Type object)
           
 
Methods inherited from class org.eclipse.ocl.examples.pivot.util.AbstractExtendingVisitor
visitAnnotation, visitAnyType, visitAssociationClass, visitAssociationClassCallExp, visitBagType, visitBehavior, visitBooleanLiteralExp, visitCallExp, visitCallOperationAction, visitCollectionItem, visitCollectionLiteralExp, visitCollectionLiteralPart, visitCollectionRange, visitComment, visitConnectionPointReference, visitConstraint, visitConstructorExp, visitConstructorPart, visitDataType, visitDetail, visitDynamicElement, visitDynamicProperty, visitDynamicType, visitElement, visitElementExtension, visitEnumeration, visitEnumerationLiteral, visitEnumLiteralExp, visitExpressionInOCL, visitFeature, visitFeatureCallExp, visitFinalState, visitIfExp, visitImport, visitIntegerLiteralExp, visitInvalidLiteralExp, visitInvalidType, visitIteration, visitLetExp, visitLibrary, visitLiteralExp, visitLoopExp, visitMessageExp, visitMessageType, visitNamedElement, visitNamespace, visitNavigationCallExp, visitNullLiteralExp, visitNumericLiteralExp, visitOCLExpression, visitOpaqueExpression, visitOperation, visitOperationTemplateParameter, visitOrderedSetType, visitPackage, visitPackageableElement, visitParameter, visitParameterableElement, visitPrecedence, visitPrimitiveLiteralExp, visitProfile, visitProperty, visitPseudostate, visitRealLiteralExp, visitRegion, visitRoot, visitSendSignalAction, visitSequenceType, visitSetType, visitSignal, visitState, visitStateExp, visitStateMachine, visitStereotype, visitStringLiteralExp, visitTemplateableElement, visitTemplateBinding, visitTemplateParameterSubstitution, visitTemplateParameterType, visitTemplateSignature, visitTransition, visitTrigger, visitTupleLiteralExp, visitTupleLiteralPart, visitTypedElement, visitTypedMultiplicityElement, visitTypeExp, visitTypeTemplateParameter, visitUnlimitedNaturalLiteralExp, visitUnspecifiedType, visitUnspecifiedValueExp, visitValueSpecification, visitVariable, visitVariableDeclaration, visitVariableExp, visitVertex, 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, wait, wait, wait
 
Methods inherited from interface org.eclipse.ocl.examples.pivot.util.Visitor
getAdapter
 

Constructor Detail

TemplateParameterSubstitutionVisitor

public TemplateParameterSubstitutionVisitor(MetaModelManager metaModelManager,
                                            Type selfType)
Method Detail

specialize

@Nullable
public DomainType specialize(@Nullable
                                      TemplateParameter templateParameter)

specialize

@NonNull
public DomainType specialize(@NonNull
                                     TemplateableElement templateableElement)

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

visit

protected void visit(@Nullable
                     TypedElement formalElement,
                     @Nullable
                     DomainTypedElement actualElement)

visit

protected void visit(@Nullable
                     Type formalType,
                     @Nullable
                     DomainTypedElement actualElement)

visit

protected void visit(@Nullable
                     Type newFormal,
                     @Nullable
                     DomainType newActual)

visitAllTypes

protected void visitAllTypes(@NonNull
                             java.util.List<? extends Type> formalElements,
                             @NonNull
                             java.util.List<? extends DomainType> actualElements)

visitAllTypedElements

protected void visitAllTypedElements(@NonNull
                                     java.util.List<? extends TypedElement> formalElements,
                                     @Nullable
                                     java.util.List<? extends DomainTypedElement> actualElements)

visiting

public java.lang.String visiting(@NonNull
                                 Visitable visitable)
Description copied from interface: Visitor
Return the result of visiting a visitable for which no more specific pivot type method is available.


visitClass

@Nullable
public java.lang.Object visitClass(@NonNull
                                            Class object)
Specified by:
visitClass in interface Visitor<java.lang.Object>
Overrides:
visitClass in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitCollectionType

@Nullable
public java.lang.Object visitCollectionType(@NonNull
                                                     CollectionType object)
Specified by:
visitCollectionType in interface Visitor<java.lang.Object>
Overrides:
visitCollectionType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitIterateExp

@Nullable
public java.lang.Object visitIterateExp(@NonNull
                                                 IterateExp object)
Specified by:
visitIterateExp in interface Visitor<java.lang.Object>
Overrides:
visitIterateExp in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitIteratorExp

@Nullable
public java.lang.Object visitIteratorExp(@NonNull
                                                  IteratorExp object)
Specified by:
visitIteratorExp in interface Visitor<java.lang.Object>
Overrides:
visitIteratorExp in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitLambdaType

@Nullable
public java.lang.Object visitLambdaType(@NonNull
                                                 LambdaType object)
Specified by:
visitLambdaType in interface Visitor<java.lang.Object>
Overrides:
visitLambdaType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitMetaclass

@Nullable
public java.lang.Object visitMetaclass(@NonNull
                                                Metaclass object)
Specified by:
visitMetaclass in interface Visitor<java.lang.Object>
Overrides:
visitMetaclass in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitOperationCallExp

@Nullable
public java.lang.Object visitOperationCallExp(@NonNull
                                                       OperationCallExp object)
Specified by:
visitOperationCallExp in interface Visitor<java.lang.Object>
Overrides:
visitOperationCallExp in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitPrimitiveType

@Nullable
public java.lang.Object visitPrimitiveType(@NonNull
                                                    PrimitiveType object)
Specified by:
visitPrimitiveType in interface Visitor<java.lang.Object>
Overrides:
visitPrimitiveType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitPropertyCallExp

@Nullable
public java.lang.Object visitPropertyCallExp(@NonNull
                                                      PropertyCallExp object)
Specified by:
visitPropertyCallExp in interface Visitor<java.lang.Object>
Overrides:
visitPropertyCallExp in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitSelfType

@Nullable
public java.lang.Object visitSelfType(@NonNull
                                               SelfType object)
Specified by:
visitSelfType in interface Visitor<java.lang.Object>
Overrides:
visitSelfType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitTemplateParameter

@Nullable
public java.lang.Object visitTemplateParameter(@NonNull
                                                        TemplateParameter object)
Specified by:
visitTemplateParameter in interface Visitor<java.lang.Object>
Overrides:
visitTemplateParameter in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitTupleType

@Nullable
public java.lang.Object visitTupleType(@NonNull
                                                TupleType object)
Specified by:
visitTupleType in interface Visitor<java.lang.Object>
Overrides:
visitTupleType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>

visitType

@Nullable
public java.lang.Object visitType(@NonNull
                                           Type object)
Specified by:
visitType in interface Visitor<java.lang.Object>
Overrides:
visitType in class AbstractExtendingVisitor<java.lang.Object,java.util.Map<TemplateParameter,java.util.List<DomainType>>>