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

Merge branch '4166' into 'master'

4166: Avoid exceptions/hangs when saving/importing model files

Closes af3#4166

See merge request !152
parents 52d02ef6 e28cfb72
No related branches found
No related tags found
1 merge request!1524166: Avoid exceptions/hangs when saving/importing model files
......@@ -2,7 +2,7 @@ ActionService.java e29126b5947c9fd2f1d82bb87001b9d0ead50c3b GREEN
AllocationEditPartFactoryService.java 1656319f018b4df6d18643e2eb76e012f45c2392 GREEN
ContextMenuService.java 802b6d0ade78f91478cd8959cfb423b9963d43bf GREEN
EditPartFactoryService.java 14c44fd426da4a26bfd4012652ea510a4b149421 GREEN
MarkerService.java 505296c356f8d66c5c009b6d6181a971d02a9501 GREEN
MarkerService.java a55e049097d18e419464a09e6f8330b65348cc36 GREEN
ModelEditorBindingService.java 52038a912db203fb8d63a000a59872cfa94e0eea GREEN
ModelElementHandlerService.java 34adeef844bf98c69f1b9a7252f34d0a2b741b54 GREEN
NavigatorService.java 1d773dde3791ddf7051616fe249558e7e307757d GREEN
......
......@@ -25,10 +25,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
......@@ -87,11 +88,9 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene
}
};
/**
* List of invalid top-level elements to be refreshed by the constraint
* checker job.
*/
private final List<ITopLevelElement> invalidElements = new LinkedList<ITopLevelElement>();
/** Invalid top-level elements to be refreshed by the constraint checker job. */
private final Queue<ITopLevelElement> invalidElements =
new ConcurrentLinkedQueue<ITopLevelElement>();
/** Stores the marker view. */
private ErrorViewFXLayoutController markerController;
......@@ -101,29 +100,19 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene
@Override
protected IStatus run(IProgressMonitor monitor) {
ITopLevelElement toBeRefreshed;
// get next element to be refreshed
synchronized(invalidElements) {
if(invalidElements.isEmpty()) {
return Status.OK_STATUS;
}
toBeRefreshed = invalidElements.remove(0);
}
while(toBeRefreshed != null) {
do {
if(monitor.isCanceled()) {
return Status.CANCEL_STATUS;
}
refreshMarkers(toBeRefreshed);
// get next element to be refreshed
synchronized(invalidElements) {
if(invalidElements.isEmpty()) {
toBeRefreshed = null;
} else {
toBeRefreshed = invalidElements.remove(0);
}
ITopLevelElement toBeRefreshed = invalidElements.poll();
if(toBeRefreshed == null) {
return Status.OK_STATUS;
}
}
return Status.OK_STATUS;
refreshMarkers(toBeRefreshed);
} while(true);
}
};
......@@ -226,9 +215,7 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene
/** Schedules the given element for constraint checking. */
private void doConstraintCheck(ITopLevelElement element) {
synchronized(invalidElements) {
invalidElements.add(element);
}
invalidElements.add(element);
constraintCheckerJob.schedule();
}
......
AutoUndoCommandStack.java fc326adf66c6cea2354884cdc240da5f2f82689a GREEN
EMFTransactionalCommand.java ba4b5bead9768b6ce6c955b9238cd96cb722533c GREEN
EclipseResourceStorageService.java e917c822c53eacada70188e66215d91241a29a5c GREEN
ModelContext.java efa60d240cd7bd8900685c35afcc87f56e6995fb GREEN
ModelContext.java 76eeaef7f56da5f0e288cf96792850be606b7757 GREEN
NonDirtyingEMFTransactionalCommand.java d288ebe35d22442c603496b0c917fb99a8febeea GREEN
......@@ -16,6 +16,7 @@
package org.fortiss.tooling.kernel.internal.storage.eclipse;
import static java.lang.Math.max;
import static org.eclipse.core.resources.IResource.DEPTH_ZERO;
import static org.eclipse.emf.common.util.URI.createPlatformResourceURI;
import static org.fortiss.tooling.kernel.utils.EMFResourceUtils.buildOptionsMap;
import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
......@@ -316,6 +317,7 @@ class ModelContext implements ITopLevelElement, CommandStackListener {
try {
// Step 3: write file content to disk (for resource managed by kernel)
ByteArrayInputStream stream = new ByteArrayInputStream(bytes.toByteArray());
file.refreshLocal(DEPTH_ZERO, monitor);
file.setContents(stream, false, true, monitor);
} catch(CoreException e) {
if(exception == null) {
......
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