blob: 67f9b70c5311bd77ad36584656a7588ebd5e0502 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 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.codegen.qvti.analyzer;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.analyzer.CG2StringVisitor;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
import org.eclipse.ocl.examples.codegen.cgmodel.CGVariableExp;
import org.eclipse.qvtd.codegen.qvticgmodel.CGEcorePropertyAssignment;
import org.eclipse.qvtd.codegen.qvticgmodel.CGEcoreRealizedVariable;
import org.eclipse.qvtd.codegen.qvticgmodel.CGFunction;
import org.eclipse.qvtd.codegen.qvticgmodel.CGFunctionCallExp;
import org.eclipse.qvtd.codegen.qvticgmodel.CGFunctionParameter;
import org.eclipse.qvtd.codegen.qvticgmodel.CGGuardVariable;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMapping;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingCall;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingCallBinding;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingExp;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingLoop;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMiddlePropertyAssignment;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMiddlePropertyCallExp;
import org.eclipse.qvtd.codegen.qvticgmodel.CGPredicate;
import org.eclipse.qvtd.codegen.qvticgmodel.CGPropertyAssignment;
import org.eclipse.qvtd.codegen.qvticgmodel.CGRealizedVariable;
import org.eclipse.qvtd.codegen.qvticgmodel.CGSequence;
import org.eclipse.qvtd.codegen.qvticgmodel.CGTransformation;
import org.eclipse.qvtd.codegen.qvticgmodel.CGTypedModel;
import org.eclipse.qvtd.codegen.qvticgmodel.CGVariablePredicate;
import org.eclipse.qvtd.codegen.qvticgmodel.QVTiCGModelPackage;
import org.eclipse.qvtd.codegen.qvticgmodel.util.QVTiCGModelVisitor;
import org.eclipse.qvtd.pivot.qvtimperative.MappingCall;
public class QVTiCG2StringVisitor extends CG2StringVisitor implements QVTiCGModelVisitor<String>
{
private static final class MyFactory extends AbstractFactory
{
private MyFactory() {
CG2StringVisitor.addFactory(this);
}
@Override
public @NonNull CG2StringVisitor createToStringVisitor() {
return new QVTiCG2StringVisitor();
}
@Override
public @NonNull EPackage getEPackage() {
QVTiCGModelPackage eInstance = QVTiCGModelPackage.eINSTANCE;
assert eInstance != null;
return eInstance;
}
}
public static @NonNull QVTiCG2StringVisitor.Factory FACTORY = new MyFactory();
public QVTiCG2StringVisitor() {}
@Override
@Nullable
public String visitCGEcorePropertyAssignment(@NonNull CGEcorePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public @Nullable String visitCGEcoreRealizedVariable(@NonNull CGEcoreRealizedVariable object) {
return visitCGRealizedVariable(object);
}
@Override
public @Nullable String visitCGFunction(@NonNull CGFunction object) {
return visitCGOperation(object);
}
@Override
public @Nullable String visitCGFunctionCallExp(@NonNull CGFunctionCallExp object) {
return visitCGOperationCallExp(object);
}
@Override
public @Nullable String visitCGFunctionParameter(@NonNull CGFunctionParameter object) {
return visitCGParameter(object);
}
@Override
public @Nullable String visitCGGuardVariable(@NonNull CGGuardVariable object) {
return visitCGParameter(object);
}
@Override
public @Nullable String visitCGMapping(@NonNull CGMapping cgMapping) {
appendQualifiedName(cgMapping.getTransformation(), ".", cgMapping);
append("(");
boolean isFirst = true;
for (CGGuardVariable cgFreeVariable : cgMapping.getFreeVariables()) {
if (!isFirst) {
append(",");
}
appendElementType(cgFreeVariable);
isFirst = false;
}
append(")");
return null;
}
@Override
public @Nullable String visitCGMappingCall(@NonNull CGMappingCall cgMappingCall) {
appendName(((MappingCall)cgMappingCall.getAst()).getReferredMapping());
append("(");
for (CGValuedElement argument : cgMappingCall.getMappingCallBindings()) {
safeVisit(argument);
append("; ");
}
append(")");
return null;
}
@Override
public @Nullable String visitCGMappingCallBinding(@NonNull CGMappingCallBinding cgMappingCallBinding) {
appendName(cgMappingCallBinding);
append(" := ");
safeVisit(cgMappingCallBinding.getValue());
return null;
}
@Override
public @Nullable String visitCGMappingExp(@NonNull CGMappingExp object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable String visitCGMappingLoop(@NonNull CGMappingLoop object) {
return visitCGIterationCallExp(object);
}
@Override
public @Nullable String visitCGMiddlePropertyAssignment(@NonNull CGMiddlePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public @Nullable String visitCGMiddlePropertyCallExp(@NonNull CGMiddlePropertyCallExp object) {
return visitCGOppositePropertyCallExp(object);
}
@Override
public @Nullable String visitCGPredicate(@NonNull CGPredicate cgPredicate) {
safeVisit(cgPredicate.getConditionExpression());
append(", ");
safeVisit(cgPredicate.getThenExpression());
return null;
}
@Override
public @Nullable String visitCGPropertyAssignment(@NonNull CGPropertyAssignment cgPropertyAssignment) {
safeVisit(cgPropertyAssignment.getSlotValue());
append(".");
appendName(cgPropertyAssignment.getReferredProperty());
append(" := ");
safeVisit(cgPropertyAssignment.getInitValue());
return null;
}
@Override
public @Nullable String visitCGRealizedVariable(@NonNull CGRealizedVariable object) {
return visitCGVariable(object);
}
@Override
public @Nullable String visitCGSequence(@NonNull CGSequence object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable String visitCGTransformation(@NonNull CGTransformation object) {
return visitCGClass(object);
}
@Override
public @Nullable String visitCGTypedModel(@NonNull CGTypedModel object) {
return visitCGNamedElement(object);
}
@Override
public @Nullable String visitCGVariableExp(@NonNull CGVariableExp v) {
appendName(v.getReferredVariable());
return null;
}
@Override
public @Nullable String visitCGVariablePredicate(@NonNull CGVariablePredicate cgVariablePredicate) {
appendName(cgVariablePredicate.getPredicateVariable());
append(" := ");
safeVisit(cgVariablePredicate.getConditionExpression());
append(", ");
safeVisit(cgVariablePredicate.getThenExpression());
return null;
}
}