blob: a601f917224e7baf2f7f39482807664b425cab34 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2017 E.D. Willink 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:
* E.D. Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.qvtd.pivot.qvtcore.utilities;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.NamedElement;
import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseToStringVisitor;
import org.eclipse.qvtd.pivot.qvtcore.Assignment;
import org.eclipse.qvtd.pivot.qvtcore.BottomPattern;
import org.eclipse.qvtd.pivot.qvtcore.BottomVariable;
import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
import org.eclipse.qvtd.pivot.qvtcore.CoreModel;
import org.eclipse.qvtd.pivot.qvtcore.CorePattern;
import org.eclipse.qvtd.pivot.qvtcore.EnforcementOperation;
import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
import org.eclipse.qvtd.pivot.qvtcore.GuardVariable;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.OppositePropertyAssignment;
import org.eclipse.qvtd.pivot.qvtcore.PropertyAssignment;
import org.eclipse.qvtd.pivot.qvtcore.QVTcorePackage;
import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
import org.eclipse.qvtd.pivot.qvtcore.VariableAssignment;
import org.eclipse.qvtd.pivot.qvtcore.util.QVTcoreVisitor;
/**
* Converts an OCL expression to a string for debugging. This is not intended to
* be used by client applications as an AST-to-text transformation.
*/
public class QVTcoreToStringVisitor extends QVTbaseToStringVisitor implements QVTcoreVisitor<String>
{
protected static class QVTcoreToStringFactory implements QVTbaseToStringVisitor.Factory
{
protected QVTcoreToStringFactory() {
ToStringVisitor.addFactory(this);
QVTbaseToStringVisitor.FACTORY.getClass();
}
@Override
public @NonNull ToStringVisitor createToStringVisitor(@NonNull StringBuilder s) {
return new QVTcoreToStringVisitor(s);
}
@Override
public @NonNull EPackage getEPackage() {
QVTcorePackage eInstance = QVTcorePackage.eINSTANCE;
assert eInstance != null;
return eInstance;
}
}
public static ToStringVisitor.@NonNull Factory FACTORY = new QVTcoreToStringFactory();
public QVTcoreToStringVisitor(@NonNull StringBuilder s) {
super(s);
}
@Override
public String visitAssignment(@NonNull Assignment object) {
append("Assignment ");
// appendName(object);
return null;
}
@Override
public String visitBottomPattern(@NonNull BottomPattern object) {
appendQualifiedName((NamedElement)object.getArea());
append("$Bottom");
return null;
}
@Override
public String visitBottomVariable(@NonNull BottomVariable object) {
return visitVariable(object);
}
@Override
public String visitCoreDomain(@NonNull CoreDomain object) {
appendQualifiedName(object);
return null;
}
@Override
public String visitCoreModel(@NonNull CoreModel object) {
return visitModel(object);
}
@Override
public String visitCorePattern(@NonNull CorePattern object) {
append("CorePattern ");
// appendName(object);
return null;
}
@Override
public String visitEnforcementOperation(@NonNull EnforcementOperation object) {
append("EnforcementOperation ");
// appendName(object);
return null;
}
@Override
public String visitGuardPattern(@NonNull GuardPattern object) {
appendQualifiedName((NamedElement)object.getArea());
append("$Guard");
return null;
}
@Override
public String visitGuardVariable(@NonNull GuardVariable object) {
return visitVariable(object);
}
@Override
public String visitMapping(@NonNull Mapping object) {
append("mapping ");
appendName(object);
return null;
}
@Override
public String visitNavigationAssignment(@NonNull NavigationAssignment asNavigationAssignment) {
safeVisit(asNavigationAssignment.getSlotExpression());
append(".");
appendName(QVTcoreUtil.getTargetProperty(asNavigationAssignment));
append(asNavigationAssignment.isIsPartial() ? " += " : " := ");
safeVisit(asNavigationAssignment.getValue());
return null;
}
@Override
public String visitOppositePropertyAssignment(@NonNull OppositePropertyAssignment asNavigationAssignment) {
return visitNavigationAssignment(asNavigationAssignment);
}
@Override
public String visitPropertyAssignment(@NonNull PropertyAssignment asNavigationAssignment) {
return visitNavigationAssignment(asNavigationAssignment);
}
@Override
public String visitRealizedVariable(@NonNull RealizedVariable variable) {
// append("realized ");
visitVariable(variable);
return null;
}
@Override
public String visitVariableAssignment(@NonNull VariableAssignment variableAssignment) {
appendName(variableAssignment.getTargetVariable());
append(" := ");
safeVisit(variableAssignment.getValue());
return null;
}
}