blob: 34a3193b4ef6b108ea6d08c7002888e99af00412 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2007,2010 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
*
* </copyright>
*
* $Id: OCLEnvironment.java,v 1.2 2010/04/08 06:26:34 ewillink Exp $
*/
package org.eclipse.ocl.examples.parser.ocl.environment;
import java.util.List;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EParameter;
import org.eclipse.ocl.LookupException;
import org.eclipse.ocl.cst.CSTNode;
import org.eclipse.ocl.examples.parser.environment.ecore.CSTChildEcoreEnvironment;
import org.eclipse.ocl.expressions.Variable;
public class OCLEnvironment<P extends IOCLEnvironment, AST extends Notifier, CST extends CSTNode> extends CSTChildEcoreEnvironment<OCLEnvironment<?,?,?>, P, AST, CST> implements IOCLEnvironment
{
protected OCLEnvironment(P parent, AST ast, CST cst) {
super(parent, ast, cst);
}
@Override
protected void addedVariable(String name, Variable<EClassifier, EParameter> variable, boolean isExplicit) {
// The Variable is not needed in the resource. Separate variables are created for contexts as required.
}
public OCLEnvironment<?,?,?> createNestedEnvironment(CSTNode cstNode) {
return new OCLEnvironment<OCLEnvironment<?,?,?>,Notifier,CSTNode>(this, null, cstNode);
}
@Override public EClassifier tryLookupClassifier(List<String> names) throws LookupException {
EPackage contextPackage = getContextPackage();
if (contextPackage != null) {
EClassifier eClassifier = super.tryLookupClassifier(names);
if (eClassifier != null)
return eClassifier;
}
IOCLEnvironment parent = getParentEnvironment();
if (parent != null)
return parent.tryLookupClassifier(names);
return null;
}
@Override public EPackage tryLookupPackage(List<String> path) throws LookupException {
IOCLEnvironment parent = getParentEnvironment();
if (parent == null)
return super.tryLookupPackage(path);
else
return parent.tryLookupPackage(path);
}
}