package org.reuseware.air.language.abstractsyntax.resource.as.analysis.helper; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.reuseware.air.language.abstractsyntax.ASProgram; import org.reuseware.air.language.abstractsyntax.ASStatement; import org.reuseware.air.language.abstractsyntax.AbstractSyntax; import org.reuseware.air.language.abstractsyntax.ConcreteNodeDefinition; import org.reuseware.air.language.abstractsyntax.Definition; import org.reuseware.air.language.abstractsyntax.InterfaceNodeDefinition; import org.reuseware.air.language.abstractsyntax.resource.as.IAsReferenceResolver; public abstract class DefinitionNamespaceResolverBase<ContainerType extends EObject,ReferenceType extends EObject> implements IAsReferenceResolver<ContainerType,ReferenceType>{ private Map<String,ConcreteNodeDefinition> concreteDefinitions; private Map<String,InterfaceNodeDefinition> interfaceDefinitions; private boolean initialized = false; protected void init(AbstractSyntax as){ concreteDefinitions = new HashMap<String,ConcreteNodeDefinition>(); interfaceDefinitions = new HashMap<String,InterfaceNodeDefinition>(); for(ASStatement stmt:((ASProgram)as.getUnit()).getStatement()){ Definition def = (Definition)stmt; if(stmt instanceof ConcreteNodeDefinition && !concreteDefinitions.containsKey(def.getName())){ concreteDefinitions.put(def.getName(),(ConcreteNodeDefinition)def); } else if(stmt instanceof InterfaceNodeDefinition && !interfaceDefinitions.containsKey(def.getName())){ interfaceDefinitions.put(def.getName(),(InterfaceNodeDefinition)def); } } initialized = true; } protected ConcreteNodeDefinition lookupConcreteDefinitions(String identifier, AbstractSyntax as){ if(!initialized) init(as); return concreteDefinitions.get(identifier); } protected InterfaceNodeDefinition lookupInterfaceDefinitions(String identifier, AbstractSyntax as){ if(!initialized) init(as); return interfaceDefinitions.get(identifier); } protected Definition lookup(String identifier,AbstractSyntax as){ if(lookupInterfaceDefinitions(identifier,as)!=null) return lookupInterfaceDefinitions(identifier,as); return lookupConcreteDefinitions(identifier,as); } }