| /******************************************************************************* |
| * 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.jdt.annotation.NonNull; |
| import org.eclipse.ocl.examples.codegen.analyzer.BoxingAnalyzer; |
| import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement; |
| 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; |
| import org.eclipse.qvtd.pivot.qvtimperative.MappingCallBinding; |
| |
| public class QVTiBoxingAnalyzer extends BoxingAnalyzer implements QVTiCGModelVisitor<Object> |
| { |
| |
| public QVTiBoxingAnalyzer(@NonNull QVTiAnalyzer analyzer) { |
| super(analyzer); |
| } |
| |
| @Override |
| public Object visitCGAllInstancesOperationCallExp(@NonNull CGAllInstancesOperationCallExp object) { |
| return visitCGLibraryOperationCallExp(object); |
| } |
| |
| @Override |
| public Object visitCGEcorePropertyAssignment(@NonNull CGEcorePropertyAssignment cgEcorePropertyAssignment) { |
| rewriteAsUnboxed(cgEcorePropertyAssignment.getSlotValue()); |
| rewriteAsUnboxed(cgEcorePropertyAssignment.getInitValue()); |
| return visitCGPropertyAssignment(cgEcorePropertyAssignment); |
| } |
| |
| @Override |
| public Object visitCGEcoreRealizedVariable(@NonNull CGEcoreRealizedVariable cgEcoreRealizedVariable) { |
| rewriteAsAssertNonNulled(cgEcoreRealizedVariable); |
| return visitCGRealizedVariable(cgEcoreRealizedVariable); |
| } |
| |
| @Override |
| public Object visitCGFunction(@NonNull CGFunction cgFunction) { |
| visitCGOperation(cgFunction); |
| rewriteAsUnboxed(cgFunction.getBody()); |
| return null; |
| } |
| |
| @Override |
| public Object visitCGFunctionCallExp(@NonNull CGFunctionCallExp cgFunctionCallExp) { |
| visitCGOperationCallExp(cgFunctionCallExp); |
| for (CGValuedElement cgArgument : cgFunctionCallExp.getArguments()) { |
| rewriteAsUnboxed(cgArgument); |
| } |
| return null; |
| } |
| |
| @Override |
| public Object visitCGFunctionParameter(@NonNull CGFunctionParameter object) { |
| return visitCGParameter(object); |
| } |
| |
| @Override |
| public Object visitCGGuardVariable(@NonNull CGGuardVariable object) { |
| return visitCGParameter(object); |
| } |
| |
| @Override |
| public Object visitCGMapping(@NonNull CGMapping cgMapping) { |
| return visitCGNamedElement(cgMapping); |
| } |
| |
| @Override |
| public Object visitCGMappingCall(@NonNull CGMappingCall cgMappingCall) { |
| return visitCGValuedElement(cgMappingCall); |
| } |
| |
| @Override |
| public Object visitCGMappingCallBinding(@NonNull CGMappingCallBinding cgMappingCallBinding) { |
| if (cgMappingCallBinding.isRequired()) { |
| MappingCallBinding mappingCallBinding = (MappingCallBinding)cgMappingCallBinding.getAst(); |
| rewriteAsUnboxed(rewriteAsGuarded(cgMappingCallBinding.getValue(), "binding for '" + mappingCallBinding.getMappingCall().getReferredMapping().getName() + "::" + mappingCallBinding.getBoundVariable().getName() + "'")); // FIXME referred mapping |
| } |
| else { |
| rewriteAsUnboxed(cgMappingCallBinding.getValue()); |
| } |
| return visitCGValuedElement(cgMappingCallBinding); |
| } |
| |
| @Override |
| public Object visitCGMappingExp(@NonNull CGMappingExp object) { |
| return visitCGValuedElement(object); |
| } |
| |
| @Override |
| public Object visitCGMappingLoop(@NonNull CGMappingLoop cgMappingLoop) { |
| visitCGIterationCallExp(cgMappingLoop); |
| rewriteAsUnboxed(cgMappingLoop.getSource()); |
| return null; |
| } |
| |
| @Override |
| public Object visitCGMiddlePropertyAssignment(@NonNull CGMiddlePropertyAssignment cgMiddlePropertyAssignment) { |
| rewriteAsUnboxed(cgMiddlePropertyAssignment.getSlotValue()); |
| rewriteAsUnboxed(cgMiddlePropertyAssignment.getInitValue()); |
| return visitCGPropertyAssignment(cgMiddlePropertyAssignment); |
| } |
| |
| @Override |
| public Object visitCGMiddlePropertyCallExp(@NonNull CGMiddlePropertyCallExp object) { |
| return visitCGOppositePropertyCallExp(object); |
| } |
| |
| @Override |
| public Object visitCGPredicate(@NonNull CGPredicate cgPredicate) { |
| return visitCGValuedElement(cgPredicate); |
| } |
| |
| @Override |
| public Object visitCGPropertyAssignment(@NonNull CGPropertyAssignment cgPropertyAssignment) { |
| return visitCGValuedElement(cgPropertyAssignment); |
| } |
| |
| @Override |
| public Object visitCGRealizedVariable(@NonNull CGRealizedVariable cgRealizedVariable) { |
| return visitCGVariable(cgRealizedVariable); |
| } |
| |
| @Override |
| public Object visitCGSequence(@NonNull CGSequence object) { |
| return visitCGValuedElement(object); |
| } |
| |
| @Override |
| public Object visitCGTransformation(@NonNull CGTransformation cgTransformation) { |
| return visitCGClass(cgTransformation); |
| } |
| |
| @Override |
| public Object visitCGTypedModel(@NonNull CGTypedModel object) { |
| return visitCGNamedElement(object); |
| } |
| |
| @Override |
| public Object visitCGVariablePredicate(@NonNull CGVariablePredicate object) { |
| return visitCGPredicate(object); |
| } |
| } |