/* * Copyright (c) 2010, IETR/INSA of Rennes * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the IETR/INSA of Rennes nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ package net.sf.orcc.cal.services; import net.sf.orcc.cal.cal.AstAction; import net.sf.orcc.cal.cal.AstActor; import net.sf.orcc.cal.cal.AstAnnotation; import net.sf.orcc.cal.cal.AstEntity; import net.sf.orcc.cal.cal.AstExpression; import net.sf.orcc.cal.cal.AstTag; import net.sf.orcc.cal.cal.AstUnit; import net.sf.orcc.cal.cal.Generator; import net.sf.orcc.cal.cal.StatementForeach; import net.sf.orcc.cal.util.Util; import net.sf.orcc.util.OrccUtil; import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; import org.eclipse.xtext.naming.QualifiedName; /** * This class defines a qualified name provider for RVC-CAL. * * @author Matthieu Wipliez * */ public class CalQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider { public QualifiedName qualifiedName(AstAction action) { AstTag tag = action.getTag(); QualifiedName result = getFullyQualifiedName(action.eContainer()); if (tag == null) { result = result.append(getConverter().toQualifiedName( action.toString())); } else { result = result.append(getConverter().toQualifiedName( OrccUtil.toString(tag.getIdentifiers(), "."))); } return result; } public QualifiedName qualifiedName(AstActor actor) { return getConverter().toQualifiedName( Util.getQualifiedName((AstEntity) actor.eContainer())); } public QualifiedName qualifiedName(AstEntity entity) { return getConverter().toQualifiedName(Util.getQualifiedName(entity)); } public QualifiedName qualifiedName(AstExpression expr) { return null; } public QualifiedName qualifiedName(AstTag tag) { QualifiedName container = getFullyQualifiedName(tag.eContainer()); if (container == null) { container = getConverter().toQualifiedName( tag.eContainer().toString()); } final QualifiedName qtag = getConverter().toQualifiedName( OrccUtil.toString(tag.getIdentifiers(), ".")); return container.append(qtag); } public QualifiedName qualifiedName(AstUnit unit) { return getConverter().toQualifiedName( Util.getQualifiedName((AstEntity) unit.eContainer())); } public QualifiedName qualifiedName(Generator generator) { return getConverter().toQualifiedName(generator.toString()); } public QualifiedName qualifiedName(StatementForeach foreach) { return getConverter().toQualifiedName(foreach.toString()); } public QualifiedName qualifiedName(AstAnnotation annotation) { return getConverter().toQualifiedName( annotation.eContainer().toString()) .append(annotation.getName()); } }