All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.eclipse.ocl.internal.evaluation.TracingEvaluationVisitor Maven / Gradle / Ivy
/**
*
*
* Copyright (c) 2007 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*
*
*
* $Id: TracingEvaluationVisitor.java,v 1.2 2009/09/01 20:11:22 ewillink Exp $
*/
package org.eclipse.ocl.internal.evaluation;
import org.eclipse.ocl.EvaluationVisitor;
import org.eclipse.ocl.EvaluationVisitorDecorator;
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.internal.OCLPlugin;
import org.eclipse.ocl.utilities.ExpressionInOCL;
/**
* A decorator for evaluation visitors that is installed when evaluation tracing
* is enabled, to trace interim evaluation results to the console.
*
* @author Christian W. Damus (cdamus)
*/
public class TracingEvaluationVisitor
extends EvaluationVisitorDecorator {
/**
* Initializes me with the visitor whose evaluation I trace to the console.
*
* @param decorated a real evaluation visitor
*/
public TracingEvaluationVisitor(
EvaluationVisitor decorated) {
super(decorated);
}
private boolean isInvalid(Object value) {
return value == getEnvironment().getOCLStandardLibrary().getInvalid();
}
private Object trace(Object expression, Object value) {
try {
OCLPlugin.trace("Evaluate: " + expression); //$NON-NLS-1$
OCLPlugin.trace("Result : " + //$NON-NLS-1$
(isInvalid(value)? "OclInvalid" : String.valueOf(value))); //$NON-NLS-1$
} catch (Exception e) {
// tracing must not interfere with evaluation
}
return value;
}
@Override
public Object visitAssociationClassCallExp(
AssociationClassCallExp callExp) {
return trace(callExp, getDelegate().visitAssociationClassCallExp(callExp));
}
@Override
public Object visitBooleanLiteralExp(BooleanLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitBooleanLiteralExp(literalExp));
}
@Override
public Object visitCollectionItem(CollectionItem item) {
return trace(item, getDelegate().visitCollectionItem(item));
}
@Override
public Object visitCollectionLiteralExp(CollectionLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitCollectionLiteralExp(literalExp));
}
@Override
public Object visitCollectionRange(CollectionRange range) {
return trace(range, getDelegate().visitCollectionRange(range));
}
@Override
public Object visitConstraint(CT constraint) {
return trace(constraint, getDelegate().visitConstraint(constraint));
}
@Override
public Object visitEnumLiteralExp(EnumLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitEnumLiteralExp(literalExp));
}
@Override
public Object visitExpression(OCLExpression expression) {
return trace(expression, getDelegate().visitExpression(expression));
}
@Override
public Object visitExpressionInOCL(ExpressionInOCL expression) {
return trace(expression, getDelegate().visitExpressionInOCL(expression));
}
@Override
public Object visitIfExp(IfExp ifExp) {
return trace(ifExp, getDelegate().visitIfExp(ifExp));
}
@Override
public Object visitIntegerLiteralExp(IntegerLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitIntegerLiteralExp(literalExp));
}
@Override
public Object visitInvalidLiteralExp(InvalidLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitInvalidLiteralExp(literalExp));
}
@Override
public Object visitIterateExp(IterateExp callExp) {
return trace(callExp, getDelegate().visitIterateExp(callExp));
}
@Override
public Object visitIteratorExp(IteratorExp callExp) {
return trace(callExp, getDelegate().visitIteratorExp(callExp));
}
@Override
public Object visitLetExp(LetExp letExp) {
return trace(letExp, getDelegate().visitLetExp(letExp));
}
@Override
public Object visitMessageExp(MessageExp messageExp) {
return trace(messageExp, getDelegate().visitMessageExp(messageExp));
}
@Override
public Object visitNullLiteralExp(NullLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitNullLiteralExp(literalExp));
}
@Override
public Object visitOperationCallExp(OperationCallExp callExp) {
return trace(callExp, getDelegate().visitOperationCallExp(callExp));
}
@Override
public Object visitPropertyCallExp(PropertyCallExp callExp) {
return trace(callExp, getDelegate().visitPropertyCallExp(callExp));
}
@Override
public Object visitRealLiteralExp(RealLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitRealLiteralExp(literalExp));
}
@Override
public Object visitStateExp(StateExp stateExp) {
return trace(stateExp, getDelegate().visitStateExp(stateExp));
}
@Override
public Object visitStringLiteralExp(StringLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitStringLiteralExp(literalExp));
}
@Override
public Object visitTupleLiteralExp(TupleLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitTupleLiteralExp(literalExp));
}
@Override
public Object visitTupleLiteralPart(TupleLiteralPart part) {
return trace(part, getDelegate().visitTupleLiteralPart(part));
}
@Override
public Object visitTypeExp(TypeExp typeExp) {
return trace(typeExp, getDelegate().visitTypeExp(typeExp));
}
@Override
public Object visitUnlimitedNaturalLiteralExp(
UnlimitedNaturalLiteralExp literalExp) {
return trace(literalExp, getDelegate().visitUnlimitedNaturalLiteralExp(literalExp));
}
@Override
public Object visitUnspecifiedValueExp(UnspecifiedValueExp unspecExp) {
return trace(unspecExp, getDelegate().visitUnspecifiedValueExp(unspecExp));
}
@Override
public Object visitVariable(Variable variable) {
return trace(variable, getDelegate().visitVariable(variable));
}
@Override
public Object visitVariableExp(VariableExp variableExp) {
return trace(variableExp, getDelegate().visitVariableExp(variableExp));
}
}