blob: 7e60c3ba93504c165ddbae8218eb6031da34c39a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2014 Borland Software 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:
* Borland Software Corporation - initial API and implementation
* Alex Paperno - bugs 416584
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.editor.ui.completion;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.m2m.internal.qvt.oml.ast.binding.ASTBindingHelper;
import org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalEnv;
import org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalModuleEnv;
import org.eclipse.m2m.internal.qvt.oml.ast.parser.ExternalUnitElementsProvider;
import org.eclipse.m2m.internal.qvt.oml.ast.parser.QvtOperationalParserUtil;
import org.eclipse.m2m.internal.qvt.oml.ast.parser.QvtOperationalVisitorCS;
import org.eclipse.m2m.internal.qvt.oml.compiler.QvtCompilerOptions;
import org.eclipse.m2m.internal.qvt.oml.cst.MappingMethodCS;
import org.eclipse.m2m.internal.qvt.oml.cst.MappingModuleCS;
import org.eclipse.m2m.internal.qvt.oml.cst.parser.AbstractQVTParser;
import org.eclipse.m2m.internal.qvt.oml.expressions.ImperativeOperation;
import org.eclipse.ocl.SemanticException;
import org.eclipse.ocl.ecore.EcoreEnvironment;
/**
* @author aigdalov
* Created on Nov 7, 2007
*/
public class QvtCompletionVisitorCS extends QvtOperationalVisitorCS {
private QvtOperationalEnv myEnv;
public QvtCompletionVisitorCS(AbstractQVTParser parser, QvtCompilerOptions options, Monitor monitor) {
super(parser, options, monitor);
myEnv = (QvtOperationalEnv) parser.getEnvironment();
}
protected void setEnv(QvtOperationalEnv env) {
myEnv = env;
}
public QvtOperationalEnv getEnv() {
return myEnv;
}
@Override
public void visitModuleHeaders(MappingModuleCS moduleCS, URI unitURI, QvtOperationalModuleEnv env, ExternalUnitElementsProvider importResolver, ResourceSet resSet) throws SemanticException {
setEnv(env);
super.visitModuleHeaders(moduleCS, unitURI, env, importResolver, resSet);
}
@Override
protected void visitMappingMethodCS(MappingMethodCS methodCS, QvtOperationalEnv env, ImperativeOperation operation) throws SemanticException {
if (methodCS.getMappingDeclarationCS() != null && QvtOperationalParserUtil.hasOperationBody(methodCS)) {
super.visitMappingMethodCS(methodCS, env, operation);
EcoreEnvironment resolvedEnvironment = ASTBindingHelper.resolveEnvironment(operation);
if (resolvedEnvironment instanceof QvtOperationalEnv) {
setEnv((QvtOperationalEnv) resolvedEnvironment);
}
}
}
}