package org.reuseware.air.language.abstractsyntax.resource.as.analysis.helper; import java.util.Map; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.reuseware.air.language.abstractsyntax.AbstractSyntax; import org.reuseware.air.language.abstractsyntax.Import; import org.reuseware.air.language.abstractsyntax.resource.as.IAsReferenceResolveResult; import org.reuseware.air.language.abstractsyntax.resource.as.IAsReferenceResolver; public class EClassReferenceResolver<ContainerType extends EObject> implements IAsReferenceResolver<ContainerType,EClass>{ public String deResolve(EClass element, ContainerType container, EReference reference) { EClass eClass = (EClass)element; String className = eClass.getName(); String prefix = null; AbstractSyntax as = (AbstractSyntax)container.eContainer(); for(Import imp:as.getImport()){ for(EClassifier eClassifier:imp.getEPackage().getEClassifiers()){ if(eClassifier.equals(eClass)){ prefix = imp.getPrefix(); } } if(prefix!=null) break; } return prefix + "." + className; } public void resolve(String identifier, ContainerType container, EReference reference, int position, boolean resolveFuzzy, IAsReferenceResolveResult<EClass> result) { int lastPoint = identifier.lastIndexOf('.'); if(lastPoint==-1){ result.setErrorMessage("Superclasses can only be added from base models."); return; } EClass superClass = null; String prefix = identifier.substring(0,lastPoint); String className = identifier.substring(lastPoint+1); AbstractSyntax as = (AbstractSyntax)container.eResource().getContents().get(0); for(Import imp:as.getImport()){ if(imp.getPrefix().equals(prefix)){ for(EClassifier classifier:imp.getEPackage().getEClassifiers()){ if((classifier instanceof EClass) && classifier.getName().equals(className)){ superClass = (EClass)classifier; result.addMapping(identifier,superClass); return; } } } } if(superClass==null){ result.setErrorMessage("There is no class '"+className+"' in package '"+prefix+"'."); return; } } public void setOptions(Map<?, ?> options) { // TODO Auto-generated method stub } }