package com.temenos.interaction.rimdsl; import static com.google.common.collect.Lists.newArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.resource.containers.FlatResourceSetBasedAllContainersState; import org.eclipse.xtext.resource.containers.IAllContainersState; import org.eclipse.xtext.resource.impl.ResourceDescriptionsData; import com.google.common.collect.Lists; /** * FlatResourceSetBasedAllContainersState with a performance optimization. * * TODO Remove this class once we're on Xtext 2.9.0. * * @see http://rd.oams.com/browse/DS-8893 * @see http://rd.oams.com/browse/DS-8896 * * @author Michael Vorburger, based on advise from Sven Efftinge */ public class FasterFlatResourceSetBasedAllContainersState extends FlatResourceSetBasedAllContainersState { // This had to be copy/pasted :-( from FlatResourceSetBasedAllContainersState because it's private there private final static String HANDLE = "all"; private ResourceSet resourceSet; public FasterFlatResourceSetBasedAllContainersState(ResourceSet rs) { super(rs); this.resourceSet = rs; } @Override public Collection<URI> getContainedURIs(String containerHandle) { if (!HANDLE.equals(containerHandle)) return Collections.emptySet(); if (resourceSet instanceof XtextResourceSet) { XtextResourceSet xtextResourceSet = (XtextResourceSet) resourceSet; ResourceDescriptionsData descriptionsData = ResourceDescriptionsData.ResourceSetAdapter.findResourceDescriptionsData(resourceSet); if (descriptionsData != null) { return descriptionsData.getAllURIs(); } return newArrayList(xtextResourceSet.getNormalizationMap().values()); } List<URI> uris = Lists.newArrayListWithCapacity(resourceSet.getResources().size()); URIConverter uriConverter = resourceSet.getURIConverter(); for (Resource r : resourceSet.getResources()) uris.add(uriConverter.normalize(r.getURI())); return uris; } @Override public boolean isAdapterForType(Object type) { return IAllContainersState.class == type || FasterFlatResourceSetBasedAllContainersState.class == type; } }