package org.xrepl.xscript.scoping;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.scoping.impl.ImportNormalizer;
import org.eclipse.xtext.util.SimpleAttributeResolver;
import org.eclipse.xtext.xbase.scoping.XbaseImportedNamespaceScopeProvider;
import org.xrepl.xscript.xscript.XImport;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.UnmodifiableIterator;
import com.google.inject.Inject;
public class XscriptImportedNamespaceAwareLocalScopeProvider extends
XbaseImportedNamespaceScopeProvider {
@Inject
private IQualifiedNameConverter nameConverter;
@Override
protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(EObject context, boolean ignoreCase) {
List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList();
SimpleAttributeResolver<EObject, String> importResolver = SimpleAttributeResolver.newResolver(String.class,
"importedNamespace");
Iterator<EObject> eContents = Iterators.filter(context.eResource().getResourceSet().getAllContents(), EObject.class);
while (eContents.hasNext()) {
String value = importResolver.getValue(eContents.next());
ImportNormalizer resolver = createImportedNamespaceResolver(value, ignoreCase);
if (resolver != null)
importedNamespaceResolvers.add(resolver);
}
return importedNamespaceResolvers;
}
}