blob: 3cfa1a5986b88793993738b1eac3c93a1d89bccd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Borland Software Corporation
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.evaluator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EParameter;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.m2m.internal.qvt.oml.expressions.AltExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.AssertExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.AssignExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.BlockExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ComputeExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ContextualProperty;
import org.eclipse.m2m.internal.qvt.oml.expressions.DictLiteralExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.EntryOperation;
import org.eclipse.m2m.internal.qvt.oml.expressions.ForExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.Helper;
import org.eclipse.m2m.internal.qvt.oml.expressions.ImperativeIterateExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ImperativeLoopExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ImperativeOperation;
import org.eclipse.m2m.internal.qvt.oml.expressions.InstantiationExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.Library;
import org.eclipse.m2m.internal.qvt.oml.expressions.LogExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.MappingBody;
import org.eclipse.m2m.internal.qvt.oml.expressions.MappingCallExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.MappingOperation;
import org.eclipse.m2m.internal.qvt.oml.expressions.ModelType;
import org.eclipse.m2m.internal.qvt.oml.expressions.Module;
import org.eclipse.m2m.internal.qvt.oml.expressions.ModuleImport;
import org.eclipse.m2m.internal.qvt.oml.expressions.ObjectExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.OperationBody;
import org.eclipse.m2m.internal.qvt.oml.expressions.Rename;
import org.eclipse.m2m.internal.qvt.oml.expressions.ResolveExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ResolveInExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.ReturnExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.SwitchExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.VarParameter;
import org.eclipse.m2m.internal.qvt.oml.expressions.VariableInitExp;
import org.eclipse.m2m.internal.qvt.oml.expressions.WhileExp;
import org.eclipse.ocl.EvaluationVisitorDecorator;
import org.eclipse.ocl.ecore.CallOperationAction;
import org.eclipse.ocl.ecore.Constraint;
import org.eclipse.ocl.ecore.SendSignalAction;
import org.eclipse.ocl.expressions.AssociationClassCallExp;
import org.eclipse.ocl.expressions.BooleanLiteralExp;
import org.eclipse.ocl.expressions.CollectionItem;
import org.eclipse.ocl.expressions.CollectionLiteralExp;
import org.eclipse.ocl.expressions.CollectionRange;
import org.eclipse.ocl.expressions.EnumLiteralExp;
import org.eclipse.ocl.expressions.IfExp;
import org.eclipse.ocl.expressions.IntegerLiteralExp;
import org.eclipse.ocl.expressions.InvalidLiteralExp;
import org.eclipse.ocl.expressions.IterateExp;
import org.eclipse.ocl.expressions.IteratorExp;
import org.eclipse.ocl.expressions.LetExp;
import org.eclipse.ocl.expressions.MessageExp;
import org.eclipse.ocl.expressions.NullLiteralExp;
import org.eclipse.ocl.expressions.OCLExpression;
import org.eclipse.ocl.expressions.OperationCallExp;
import org.eclipse.ocl.expressions.PropertyCallExp;
import org.eclipse.ocl.expressions.RealLiteralExp;
import org.eclipse.ocl.expressions.StateExp;
import org.eclipse.ocl.expressions.StringLiteralExp;
import org.eclipse.ocl.expressions.TupleLiteralExp;
import org.eclipse.ocl.expressions.TupleLiteralPart;
import org.eclipse.ocl.expressions.TypeExp;
import org.eclipse.ocl.expressions.UnlimitedNaturalLiteralExp;
import org.eclipse.ocl.expressions.UnspecifiedValueExp;
import org.eclipse.ocl.expressions.Variable;
import org.eclipse.ocl.expressions.VariableExp;
import org.eclipse.ocl.utilities.ASTNode;
import org.eclipse.ocl.utilities.ExpressionInOCL;
import org.eclipse.ocl.utilities.Visitable;
abstract class QvtGenericEvaluationVisitor
extends EvaluationVisitorDecorator<EPackage, EClassifier, EOperation,
EStructuralFeature, EEnumLiteral, EParameter, EObject,
CallOperationAction, SendSignalAction, Constraint, EClass, EObject>
implements QvtOperationalEvaluationVisitor {
static abstract class Any extends QvtGenericEvaluationVisitor {
protected Any(QvtOperationalEvaluationVisitor qvtExtVisitor) {
super(qvtExtVisitor);
}
protected abstract void genericVisitAny(Object object);
@Override
protected void genericVisitAST(ASTNode visited) {
genericVisitAny(visited);
}
@Override
protected void genericVisitVisitable(Visitable visited) {
genericVisitAny(visited);
}
@Override
protected void genericVisitEObject(EObject visited) {
genericVisitAny(visited);
}
}
protected QvtGenericEvaluationVisitor(QvtOperationalEvaluationVisitor qvtExtVisitor) {
super(qvtExtVisitor);
}
private QvtOperationalEvaluationVisitor getQVTDelegate() {
return (QvtOperationalEvaluationVisitor) getDelegate();
}
protected void genericVisitAST(ASTNode visited) {
}
protected void genericVisitVisitable(Visitable visited) {
}
protected void genericVisitEObject(EObject visited) {
}
@Override
public Object visitAssociationClassCallExp(AssociationClassCallExp<EClassifier, EStructuralFeature> callExp) {
genericVisitAST(callExp);
return super.visitAssociationClassCallExp(callExp);
}
@Override
public Object visitBooleanLiteralExp(BooleanLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitBooleanLiteralExp(literalExp);
}
@Override
public Object visitCollectionItem(CollectionItem<EClassifier> item) {
genericVisitVisitable(item);
return super.visitCollectionItem(item);
}
@Override
public Object visitCollectionLiteralExp(CollectionLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitCollectionLiteralExp(literalExp);
}
@Override
public Object visitCollectionRange(CollectionRange<EClassifier> range) {
genericVisitVisitable(range);
return super.visitCollectionRange(range);
}
@Override
public Object visitConstraint(Constraint constraint) {
genericVisitEObject(constraint);
return super.visitConstraint(constraint);
}
@Override
public Object visitEnumLiteralExp(EnumLiteralExp<EClassifier, EEnumLiteral> literalExp) {
genericVisitAST(literalExp);
return super.visitEnumLiteralExp(literalExp);
}
@Override
public Object visitExpression(OCLExpression<EClassifier> expression) {
genericVisitAST(expression);
return super.visitExpression(expression);
}
@Override
public Object visitExpressionInOCL(ExpressionInOCL<EClassifier, EParameter> expression) {
genericVisitVisitable(expression);
return super.visitExpressionInOCL(expression);
}
@Override
public Object visitIfExp(IfExp<EClassifier> ifExp) {
genericVisitAST(ifExp);
return super.visitIfExp(ifExp);
}
@Override
public Object visitIntegerLiteralExp(IntegerLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitIntegerLiteralExp(literalExp);
}
@Override
public Object visitInvalidLiteralExp(InvalidLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitInvalidLiteralExp(literalExp);
}
@Override
public Object visitIterateExp(IterateExp<EClassifier, EParameter> callExp) {
genericVisitAST(callExp);
return super.visitIterateExp(callExp);
}
@Override
public Object visitIteratorExp(IteratorExp<EClassifier, EParameter> callExp) {
genericVisitAST(callExp);
return super.visitIteratorExp(callExp);
}
@Override
public Object visitLetExp(LetExp<EClassifier, EParameter> letExp) {
genericVisitAST(letExp);
return super.visitLetExp(letExp);
}
@Override
public Object visitMessageExp(MessageExp<EClassifier, CallOperationAction, SendSignalAction> messageExp) {
genericVisitVisitable(messageExp);
return super.visitMessageExp(messageExp);
}
@Override
public Object visitNullLiteralExp(NullLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitNullLiteralExp(literalExp);
}
@Override
public Object visitOperationCallExp(
OperationCallExp<EClassifier, EOperation> callExp) {
genericVisitAST(callExp);
return super.visitOperationCallExp(callExp);
}
@Override
public Object visitPropertyCallExp(PropertyCallExp<EClassifier, EStructuralFeature> callExp) {
genericVisitAST(callExp);
return super.visitPropertyCallExp(callExp);
}
@Override
public Object visitRealLiteralExp(RealLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitRealLiteralExp(literalExp);
}
@Override
public Object visitStateExp(StateExp<EClassifier, EObject> stateExp) {
genericVisitAST(stateExp);
return super.visitStateExp(stateExp);
}
@Override
public Object visitStringLiteralExp(StringLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitStringLiteralExp(literalExp);
}
@Override
public Object visitTupleLiteralExp(TupleLiteralExp<EClassifier, EStructuralFeature> literalExp) {
genericVisitAST(literalExp);
return super.visitTupleLiteralExp(literalExp);
}
@Override
public Object visitTupleLiteralPart(TupleLiteralPart<EClassifier, EStructuralFeature> part) {
genericVisitAST(part);
return super.visitTupleLiteralPart(part);
}
@Override
public Object visitTypeExp(TypeExp<EClassifier> typeExp) {
genericVisitAST(typeExp);
return super.visitTypeExp(typeExp);
}
@Override
public Object visitUnlimitedNaturalLiteralExp(UnlimitedNaturalLiteralExp<EClassifier> literalExp) {
genericVisitAST(literalExp);
return super.visitUnlimitedNaturalLiteralExp(literalExp);
}
@Override
public Object visitUnspecifiedValueExp(UnspecifiedValueExp<EClassifier> unspecExp) {
genericVisitAST(unspecExp);
return super.visitUnspecifiedValueExp(unspecExp);
}
@Override
public Object visitVariable(Variable<EClassifier, EParameter> variable) {
genericVisitAST(variable);
return super.visitVariable(variable);
}
@Override
public Object visitVariableExp(VariableExp<EClassifier, EParameter> variableExp) {
genericVisitAST(variableExp);
return super.visitVariableExp(variableExp);
}
/////////////////////////////////////////////////////////////////////////
// QVT specific visitors
/////////////////////////////////////////////////////////////////////////
public Object visitAssignExp(AssignExp assignExp) {
return getQVTDelegate().visitAssignExp(assignExp);
}
public Object visitBlockExp(BlockExp blockExp) {
return getQVTDelegate().visitBlockExp(blockExp);
}
public Object visitComputeExp(ComputeExp computeExp) {
return getQVTDelegate().visitComputeExp(computeExp);
}
public Object visitHelper(Helper helper) {
return getQVTDelegate().visitHelper(helper);
}
public Object visitImperativeOperation(ImperativeOperation imperativeOperation) {
return getQVTDelegate().visitImperativeOperation(imperativeOperation);
}
public Object visitLibrary(Library library) {
return getQVTDelegate().visitLibrary(library);
}
public Object visitContextualProperty(ContextualProperty contextualProperty) {
return getQVTDelegate().visitContextualProperty(contextualProperty);
}
public Object visitMappingBody(MappingBody mappingBody) {
return getQVTDelegate().visitMappingBody(mappingBody);
}
public Object visitMappingCallExp(MappingCallExp mappingCallExp) {
return getQVTDelegate().visitMappingCallExp(mappingCallExp);
}
public Object visitMappingOperation(MappingOperation mappingOperation) {
return getQVTDelegate().visitMappingOperation(mappingOperation);
}
public Object visitModelType(ModelType modelType) {
return getQVTDelegate().visitModelType(modelType);
}
public Object visitModule(Module module) {
return getQVTDelegate().visitModule(module);
}
public Object visitModuleImport(ModuleImport moduleImport) {
return getQVTDelegate().visitModuleImport(moduleImport);
}
public Object visitObjectExp(ObjectExp objectExp) {
return getQVTDelegate().visitObjectExp(objectExp);
}
public Object visitInstantiationExp(InstantiationExp instatiationExp) {
return getQVTDelegate().visitInstantiationExp(instatiationExp);
}
public Object visitOperationBody(OperationBody operationBody) {
return getQVTDelegate().visitOperationBody(operationBody);
}
public Object visitClass(org.eclipse.m2m.internal.qvt.oml.expressions.Class class_) {
return getQVTDelegate().visitClass(class_);
}
public Object visitRename(Rename rename) {
return getQVTDelegate().visitRename(rename);
}
public Object visitResolveExp(ResolveExp resolveExp) {
return getQVTDelegate().visitResolveExp(resolveExp);
}
public Object visitResolveInExp(ResolveInExp resolveInExp) {
return getQVTDelegate().visitResolveInExp(resolveInExp);
}
public Object visitSwitchAltExp(AltExp switchAltExp) {
return getQVTDelegate().visitSwitchAltExp(switchAltExp);
}
public Object visitSwitchExp(SwitchExp switchExp) {
return getQVTDelegate().visitSwitchExp(switchExp);
}
public Object visitVariableInitExp(VariableInitExp variableInitExp) {
return getQVTDelegate().visitVariableInitExp(variableInitExp);
}
public Object visitVarParameter(VarParameter varParameter) {
return getQVTDelegate().visitVarParameter(varParameter);
}
public Object visitWhileExp(WhileExp whileExp) {
return getQVTDelegate().visitWhileExp(whileExp);
}
public Object visitAssertExp(AssertExp assertExp) {
return getQVTDelegate().visitAssertExp(assertExp);
}
public Object visitLogExp(LogExp logExp) {
return getQVTDelegate().visitLogExp(logExp);
}
public Object visitImperativeLoopExp(ImperativeLoopExp imperativeLoopExp) {
return getQVTDelegate().visitImperativeLoopExp(imperativeLoopExp);
}
public Object visitForExp(ForExp forExp) {
return getQVTDelegate().visitForExp(forExp);
}
public Object visitImperativeIterateExp(ImperativeIterateExp imperativeIterateExp) {
return getQVTDelegate().visitImperativeIterateExp(imperativeIterateExp);
}
public Object visitReturnExp(ReturnExp returnExp) {
return getQVTDelegate().visitReturnExp(returnExp);
}
public Object visitEntryOperation(EntryOperation entryOperation) {
return getQVTDelegate().visitEntryOperation(entryOperation);
}
public Object visitDictLiteralExp(DictLiteralExp dictLiteralExp) {
return getQVTDelegate().visitDictLiteralExp(dictLiteralExp);
}
}