blob: fa123f6f831b1b77784745dbc166723fc7c44b1e [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 java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.analyzer.FieldingAnalyzer;
import org.eclipse.ocl.examples.codegen.cgmodel.CGIterator;
import org.eclipse.ocl.examples.codegen.cgmodel.CGVariable;
import org.eclipse.qvtd.codegen.qvticgmodel.CGAllInstancesOperationCallExp;
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.util.QVTiCGModelVisitor;
public class QVTiFieldingAnalyzer extends FieldingAnalyzer
{
public static class QVTiAnalysisVisitor extends AnalysisVisitor implements QVTiCGModelVisitor<Set<CGVariable>>
{
public QVTiAnalysisVisitor(@NonNull QVTiFieldingAnalyzer context) {
super(context);
}
@Override
public @Nullable Set<CGVariable> visitCGAllInstancesOperationCallExp(@NonNull CGAllInstancesOperationCallExp object) {
return visitCGLibraryOperationCallExp(object);
}
@Override
public @Nullable Set<CGVariable> visitCGEcorePropertyAssignment(@NonNull CGEcorePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public @Nullable Set<CGVariable> visitCGEcoreRealizedVariable(@NonNull CGEcoreRealizedVariable object) {
return visitCGRealizedVariable(object);
}
@Override
public @Nullable Set<CGVariable> visitCGFunction(@NonNull CGFunction object) {
return visitCGOperation(object);
}
@Override
public @Nullable Set<CGVariable> visitCGFunctionCallExp(@NonNull CGFunctionCallExp object) {
return visitCGOperationCallExp(object);
}
@Override
public @Nullable Set<CGVariable> visitCGFunctionParameter(@NonNull CGFunctionParameter object) {
return visitCGParameter(object);
}
@Override
public @Nullable Set<CGVariable> visitCGGuardVariable(@NonNull CGGuardVariable object) {
return visitCGParameter(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMapping(@NonNull CGMapping object) {
return visitCGNamedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMappingCall(@NonNull CGMappingCall object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMappingCallBinding(@NonNull CGMappingCallBinding object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMappingExp(@NonNull CGMappingExp object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMappingLoop(@NonNull CGMappingLoop object) {
return visitCGIterationCallExp(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMiddlePropertyAssignment(@NonNull CGMiddlePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public @Nullable Set<CGVariable> visitCGMiddlePropertyCallExp(@NonNull CGMiddlePropertyCallExp object) {
return visitCGOppositePropertyCallExp(object);
}
@Override
public @Nullable Set<CGVariable> visitCGPredicate(@NonNull CGPredicate object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGPropertyAssignment(@NonNull CGPropertyAssignment object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGRealizedVariable(@NonNull CGRealizedVariable object) {
return visitCGVariable(object);
}
@Override
public @Nullable Set<CGVariable> visitCGSequence(@NonNull CGSequence object) {
return visitCGValuedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGTransformation(@NonNull CGTransformation object) {
return visitCGClass(object);
}
@Override
public @Nullable Set<CGVariable> visitCGTypedModel(@NonNull CGTypedModel object) {
return visitCGNamedElement(object);
}
@Override
public @Nullable Set<CGVariable> visitCGVariablePredicate(@NonNull CGVariablePredicate object) {
return visitCGPredicate(object);
}
}
public static class QVTiRewriteVisitor extends RewriteVisitor implements QVTiCGModelVisitor<Boolean>
{
public QVTiRewriteVisitor(@NonNull QVTiAnalyzer context, @NonNull Set<CGVariable> caughtVariables) {
super(context, caughtVariables);
}
@Override
public Boolean visitCGAllInstancesOperationCallExp(@NonNull CGAllInstancesOperationCallExp object) {
return visitCGLibraryOperationCallExp(object);
}
@Override
public Boolean visitCGEcorePropertyAssignment(@NonNull CGEcorePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public Boolean visitCGEcoreRealizedVariable(@NonNull CGEcoreRealizedVariable object) {
return visitCGRealizedVariable(object);
}
@Override
public Boolean visitCGFunction(@NonNull CGFunction object) {
return visitCGOperation(object);
}
@Override
public Boolean visitCGFunctionCallExp(@NonNull CGFunctionCallExp object) {
return visitCGOperationCallExp(object);
}
@Override
public Boolean visitCGFunctionParameter(@NonNull CGFunctionParameter object) {
return visitCGParameter(object);
}
@Override
public Boolean visitCGGuardVariable(@NonNull CGGuardVariable object) {
return visitCGParameter(object);
}
@Override
public Boolean visitCGMapping(@NonNull CGMapping object) {
return visitCGNamedElement(object);
}
@Override
public Boolean visitCGMappingCall(@NonNull CGMappingCall object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGMappingCallBinding(@NonNull CGMappingCallBinding object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGMappingExp(@NonNull CGMappingExp object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGMappingLoop(@NonNull CGMappingLoop cgElement) {
// return visitCGIterationCallExp(object);
rewriteAsThrown(cgElement.getSource());
for (CGIterator cgIterator : cgElement.getIterators()) {
cgIterator.accept(this);
}
// if (cgElement.getReferredIteration().isValidating()) {
// rewriteAsCaught(cgElement.getBody());
// }
// else {
rewriteAsThrown(cgElement.getBody());
// }
cgElement.setCaught(false);
return false;
}
@Override
public Boolean visitCGMiddlePropertyAssignment(@NonNull CGMiddlePropertyAssignment object) {
return visitCGPropertyAssignment(object);
}
@Override
public Boolean visitCGMiddlePropertyCallExp(@NonNull CGMiddlePropertyCallExp object) {
return visitCGOppositePropertyCallExp(object);
}
@Override
public Boolean visitCGPredicate(@NonNull CGPredicate object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGPropertyAssignment(@NonNull CGPropertyAssignment object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGRealizedVariable(@NonNull CGRealizedVariable object) {
return visitCGVariable(object);
}
@Override
public Boolean visitCGSequence(@NonNull CGSequence object) {
return visitCGValuedElement(object);
}
@Override
public Boolean visitCGTransformation(@NonNull CGTransformation object) {
return visitCGClass(object);
}
@Override
public Boolean visitCGTypedModel(@NonNull CGTypedModel object) {
return visitCGNamedElement(object);
}
@Override
public Boolean visitCGVariablePredicate(@NonNull CGVariablePredicate object) {
return visitCGPredicate(object);
}
}
public QVTiFieldingAnalyzer(@NonNull QVTiAnalyzer analyzer) {
super(analyzer);
}
@Override
protected @NonNull AnalysisVisitor createAnalysisVisitor() {
return new QVTiAnalysisVisitor(this);
}
@Override
protected @NonNull RewriteVisitor createRewriteVisitor(@NonNull Set<CGVariable> caughtVariables) {
return new QVTiRewriteVisitor((QVTiAnalyzer) analyzer, caughtVariables);
}
}