Skip to content
Snippets Groups Projects
Commit 489ca5b6 authored by Simon Barner's avatar Simon Barner
Browse files

Refresh top level elements after modelFileChangesJob has finished

* Avoid a deadlock with the EclipseResourceStorageService

Issue-Ref: 4166
Issue-Url: af3#4166



Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent 780d0866
No related branches found
No related tags found
1 merge request!1534166: Refresh top level elements only after modelFileChangesJob has finished
Pipeline #31578 canceled
Pipeline: maven-releng

#31579

    This commit is part of merge request !153. Comments created here will be created in the context of that merge request.
    AutoUndoCommandStack.java fc326adf66c6cea2354884cdc240da5f2f82689a GREEN
    EMFTransactionalCommand.java ba4b5bead9768b6ce6c955b9238cd96cb722533c GREEN
    EclipseResourceStorageService.java e917c822c53eacada70188e66215d91241a29a5c GREEN
    ModelContext.java 76eeaef7f56da5f0e288cf96792850be606b7757 GREEN
    EclipseResourceStorageService.java 5e60ef7628ea2ad4113cfebde939341e1b1f6cf2 YELLOW
    ModelContext.java 76eeaef7f56da5f0e288cf96792850be606b7757 YELLOW
    NonDirtyingEMFTransactionalCommand.java d288ebe35d22442c603496b0c917fb99a8febeea GREEN
    ......@@ -49,6 +49,8 @@ import org.eclipse.core.runtime.IConfigurationElement;
    import org.eclipse.core.runtime.IProgressMonitor;
    import org.eclipse.core.runtime.IStatus;
    import org.eclipse.core.runtime.Status;
    import org.eclipse.core.runtime.jobs.IJobChangeEvent;
    import org.eclipse.core.runtime.jobs.JobChangeAdapter;
    import org.eclipse.emf.common.util.URI;
    import org.eclipse.emf.ecore.EObject;
    import org.eclipse.emf.ecore.resource.Resource;
    ......@@ -202,10 +204,10 @@ public class EclipseResourceStorageService
    /** Runs resource change job as workspace job. */
    private void runWorkspaceChangeJob(final IFile file, final int changeKind) {
    new WorkspaceJob("ModelFileChangedJob") {
    WorkspaceJob modelFileChangesJob = new WorkspaceJob("ModelFileChangedJob") {
    @Override
    public IStatus runInWorkspace(IProgressMonitor monitor) {
    IPersistencyService ps = IPersistencyService.getInstance();
    synchronized(EclipseResourceStorageService.this) {
    // Model file that is managed by kernel has been changed
    if(checkLocationProvider(file)) {
    ......@@ -218,11 +220,10 @@ public class EclipseResourceStorageService
    loadContext(file);
    }
    }
    // Refresh the top-level elements
    ps.refreshTopLevelElements(EclipseResourceStorageService.this);
    } else if(changeKind == REMOVED) {
    // A file has been removed. Remove it from one of the ResourceSets owned by
    // the kernel.
    IPersistencyService ps = IPersistencyService.getInstance();
    for(ITopLevelElement topLevelElement : ps.getTopLevelElements()) {
    final ResourceSet resourceSet = topLevelElement.getResourceSet();
    final List<Resource> toRemove = new ArrayList<Resource>();
    ......@@ -256,7 +257,19 @@ public class EclipseResourceStorageService
    }
    return Status.OK_STATUS;
    }
    }.schedule();
    };
    // Refresh top level elements after modelFileChangesJob has finished in order to avoid
    // a deadlock with the EclipseResourceStorageService
    modelFileChangesJob.addJobChangeListener(new JobChangeAdapter() {
    @Override
    public void done(IJobChangeEvent event) {
    IPersistencyService ps = IPersistencyService.getInstance();
    ps.refreshTopLevelElements(EclipseResourceStorageService.this);
    }
    });
    modelFileChangesJob.schedule();
    }
    /** Returns whether the given file has been loaded by this manager. */
    ......@@ -380,9 +393,8 @@ public class EclipseResourceStorageService
    /** {@inheritDoc} */
    @Override
    public IIntrospectionDetailsItem getDetailsItem() {
    return new EclipseResourceStorageKISSDetailsItem(
    unmodifiableList(storageProviderList), unmodifiableSet(loadedContexts.keySet()),
    unmodifiableList(errorFiles));
    return new EclipseResourceStorageKISSDetailsItem(unmodifiableList(storageProviderList),
    unmodifiableSet(loadedContexts.keySet()), unmodifiableList(errorFiles));
    }
    /** {@inheritDoc} */
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment