|
@@ -15,6 +15,7 @@ import java.util.Optional;
|
|
|
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.transaction.RunnableWithResult;
|
|
|
import org.eclipse.emf.transaction.TransactionalEditingDomain;
|
|
|
import org.eclipse.emf.workspace.WorkspaceEditingDomainFactory;
|
|
|
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
|
|
@@ -42,7 +43,7 @@ public class ImportedResourceCache {
|
|
|
@Inject
|
|
|
private IResourceScopeCache cache;
|
|
|
|
|
|
- protected TransactionalEditingDomain getEditingDomain() {
|
|
|
+ protected static synchronized TransactionalEditingDomain getEditingDomain() {
|
|
|
TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE
|
|
|
.getEditingDomain(DOMAIN_ID);
|
|
|
if (editingDomain == null) {
|
|
@@ -55,29 +56,41 @@ public class ImportedResourceCache {
|
|
|
}
|
|
|
|
|
|
public IResourceDescription get(final URI uri) {
|
|
|
- final ResourceSet set = getResourceSet();
|
|
|
- final Resource resource = set.getResource(uri, true);
|
|
|
- if (resource != null) {
|
|
|
- Optional<IResourceDescription> optional = cache.get(ImportedResourceCache.class, resource,
|
|
|
- new Provider<Optional<IResourceDescription>>() {
|
|
|
+ try {
|
|
|
+ return (IResourceDescription) getEditingDomain()
|
|
|
+ .runExclusive(new RunnableWithResult.Impl<IResourceDescription>() {
|
|
|
@Override
|
|
|
- public Optional<IResourceDescription> get() {
|
|
|
- IResourceServiceProvider serviceProvider = serviceProviderRegistry
|
|
|
- .getResourceServiceProvider(uri);
|
|
|
- if (serviceProvider == null)
|
|
|
- return Optional.empty();
|
|
|
- final Manager resourceDescriptionManager = serviceProvider.getResourceDescriptionManager();
|
|
|
- if (resourceDescriptionManager == null)
|
|
|
- return Optional.empty();
|
|
|
- IResourceDescription result = resourceDescriptionManager.getResourceDescription(resource);
|
|
|
- return Optional.of(result);
|
|
|
+ public void run() {
|
|
|
+ final ResourceSet set = getResourceSet();
|
|
|
+ final Resource resource = set.getResource(uri, true);
|
|
|
+ if (resource != null) {
|
|
|
+ Optional<IResourceDescription> optional = cache.get(ImportedResourceCache.class,
|
|
|
+ resource, new Provider<Optional<IResourceDescription>>() {
|
|
|
+ @Override
|
|
|
+ public Optional<IResourceDescription> get() {
|
|
|
+ IResourceServiceProvider serviceProvider = serviceProviderRegistry
|
|
|
+ .getResourceServiceProvider(uri);
|
|
|
+ if (serviceProvider == null)
|
|
|
+ return Optional.empty();
|
|
|
+ final Manager resourceDescriptionManager = serviceProvider
|
|
|
+ .getResourceDescriptionManager();
|
|
|
+ if (resourceDescriptionManager == null)
|
|
|
+ return Optional.empty();
|
|
|
+ IResourceDescription result = resourceDescriptionManager
|
|
|
+ .getResourceDescription(resource);
|
|
|
+ return Optional.of(result);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (optional.isPresent()) {
|
|
|
+ setResult(optional.get());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
- if (optional.isPresent()) {
|
|
|
- return optional.get();
|
|
|
- }
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
}
|
|
|
- return null;
|
|
|
}
|
|
|
|
|
|
protected ResourceSet getResourceSet() {
|