Merge pull request #295 from eclipse/me_perf2

fixed #294 improve performance of IContainerState#contains(URI)
This commit is contained in:
Moritz Eysholdt 2017-02-28 19:46:37 +01:00 committed by GitHub
commit a58cdf7383
5 changed files with 48 additions and 4 deletions

View file

@ -27,7 +27,7 @@ class ContainerState implements IContainerState {
@Override
public boolean contains(URI uri) {
return getContents().contains(uri);
return globalState.containsURI(root, uri);
}
@Override

View file

@ -39,6 +39,11 @@ public class DelegatingIAllContainerAdapter extends AdapterImpl implements IAllC
public Collection<URI> getContainedURIs(String containerHandle) {
return delegate.getContainedURIs(containerHandle);
}
@Override
public boolean containsURI(String containerHandle, URI candidateURI) {
return delegate.containsURI(containerHandle, candidateURI);
}
@Override
public String getContainerHandle(URI uri) {

View file

@ -1,6 +1,7 @@
package org.eclipse.xtext.resource.containers;
import static com.google.common.collect.Lists.*;
import static org.eclipse.xtext.resource.impl.ResourceDescriptionsData.ResourceSetAdapter.*;
import java.util.Collection;
import java.util.Collections;
@ -43,12 +44,11 @@ public class FlatResourceSetBasedAllContainersState extends AdapterImpl implemen
if (!HANDLE.equals(containerHandle))
return Collections.emptySet();
if (resourceSet instanceof XtextResourceSet) {
XtextResourceSet xtextResourceSet = (XtextResourceSet) resourceSet;
ResourceDescriptionsData descriptionsData = ResourceDescriptionsData.ResourceSetAdapter.findResourceDescriptionsData(resourceSet);
ResourceDescriptionsData descriptionsData = findResourceDescriptionsData(resourceSet);
if (descriptionsData != null) {
return descriptionsData.getAllURIs();
}
return newArrayList(xtextResourceSet.getNormalizationMap().values());
return newArrayList(((XtextResourceSet) resourceSet).getNormalizationMap().values());
}
List<URI> uris = Lists.newArrayListWithCapacity(resourceSet.getResources().size());
URIConverter uriConverter = resourceSet.getURIConverter();
@ -56,6 +56,33 @@ public class FlatResourceSetBasedAllContainersState extends AdapterImpl implemen
uris.add(uriConverter.normalize(r.getURI()));
return uris;
}
@Override
public boolean containsURI(String containerHandle, URI candidateURI) {
if (!HANDLE.equals(containerHandle))
return false;
if (resourceSet instanceof XtextResourceSet) {
ResourceDescriptionsData descriptionsData = findResourceDescriptionsData(resourceSet);
if (descriptionsData != null) {
return descriptionsData.getResourceDescription(candidateURI) != null;
}
Collection<URI> allUris = ((XtextResourceSet) resourceSet).getNormalizationMap().values();
for (URI uri : allUris) {
if (uri.equals(candidateURI)) {
return true;
}
}
return false;
}
URIConverter uriConverter = resourceSet.getURIConverter();
for (Resource r : resourceSet.getResources()) {
URI normalized = uriConverter.normalize(r.getURI());
if (normalized.equals(candidateURI)) {
return true;
}
}
return false;
}
@Override
public String getContainerHandle(URI uri) {

View file

@ -26,6 +26,10 @@ public interface IAllContainersState {
String getContainerHandle(URI uri);
default boolean containsURI(String containerHandle, URI candidateURI) {
return getContainedURIs(containerHandle).contains(candidateURI);
}
interface Provider {
IAllContainersState get(IResourceDescriptions context);
}

View file

@ -59,6 +59,14 @@ public class LiveShadowedAllContainerState implements IAllContainersState {
result.addAll(globalState.getContainedURIs(containerHandle));
return result;
}
@Override
public boolean containsURI(String containerHandle, URI candidateURI) {
if(localDescriptions.getResourceDescription(candidateURI) != null) {
return true;
}
return globalState.containsURI(containerHandle, candidateURI);
}
@Override
public String getContainerHandle(URI uri) {