blob: 3aca661628dd2c4e10dd08a22207b94d06295edd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
package org.eclipse.xtext.example.arithmetics.scoping;
import java.util.Iterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.example.arithmetics.arithmetics.DeclaredParameter;
import org.eclipse.xtext.example.arithmetics.arithmetics.Definition;
import org.eclipse.xtext.example.arithmetics.arithmetics.Module;
import org.eclipse.xtext.example.arithmetics.arithmetics.util.ArithmeticsSwitch;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import com.google.inject.Inject;
/**
* changes the exported name of a function to be the signature and not just the simple name.
*
* @author Sven Efftinge - initial contribution and API
* @author Jan Koehnlein - introduced QualifiedName
*/
public class NameProvider extends IQualifiedNameProvider.AbstractImpl {
@Inject
private IQualifiedNameConverter qualifiedNameConverter;
public QualifiedName getFullyQualifiedName(EObject obj) {
String name = new ArithmeticsSwitch<String>() {
public String caseModule(Module object) {
return object.getName();
}
public String caseDefinition(Definition object) {
StringBuilder sb = new StringBuilder();
sb.append(doSwitch(object.eContainer()));
sb.append(".");
sb.append(object.getName());
if (!object.getArgs().isEmpty()) {
sb.append("(");
Iterator<DeclaredParameter> iter = object.getArgs()
.iterator();
int i = 1;
while (iter.hasNext()) {
iter.next();
sb.append("arg" + (i++));
if (iter.hasNext())
sb.append(",");
}
sb.append(")");
}
return sb.toString();
}
public String caseDeclaredParameter(DeclaredParameter object) {
return doSwitch(object.eContainer()) + "." + object.getName();
}
}.doSwitch(obj);
if(name == null)
return null;
return qualifiedNameConverter.toQualifiedName(name);
}
}