Deletion not handled properly with problem markers.
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
index cfff5a3..245ce3f 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
@@ -594,44 +594,37 @@
*/
private void propagateProblemMarkers(ISynchronizeModelElement element, boolean clear) {
IResource resource = element.getResource();
- if(resource != null && resource.exists()) {
- try {
- String property = null;
- if(! clear) {
+ if (resource != null) {
+ String property = null;
+ if (!clear) {
+ try {
IMarker[] markers = resource.findMarkers(IMarker.PROBLEM, true, getLogicalModelDepth(resource));
for (int i = 0; i < markers.length; i++) {
IMarker marker = markers[i];
- try {
- Integer severity = (Integer)marker.getAttribute(IMarker.SEVERITY);
- if(severity != null) {
- if(severity.intValue() == IMarker.SEVERITY_ERROR) {
- property = ISynchronizeModelElement.PROPAGATED_ERROR_MARKER_PROPERTY;
- break;
- } else if(severity.intValue() == IMarker.SEVERITY_WARNING) {
- property = ISynchronizeModelElement.PROPAGATED_WARNING_MARKER_PROPERTY;
- // Keep going because there may be errors on other resources
- }
+ Integer severity = (Integer) marker.getAttribute(IMarker.SEVERITY);
+ if (severity != null) {
+ if (severity.intValue() == IMarker.SEVERITY_ERROR) {
+ property = ISynchronizeModelElement.PROPAGATED_ERROR_MARKER_PROPERTY;
+ break;
+ } else if (severity.intValue() == IMarker.SEVERITY_WARNING) {
+ property = ISynchronizeModelElement.PROPAGATED_WARNING_MARKER_PROPERTY;
+ // Keep going because there may be errors on other resources
}
- } catch(CoreException e) {
- // the marker has been deleted skip this marker and keep going
- if(! (e.getStatus().getCode() == IResourceStatus.MARKER_NOT_FOUND)) {
- return;
- }
- continue;
}
}
- }
- // If it doesn't have a direct change, a parent might
- boolean recalculateParentDecorations = hadProblemProperty(element, property);
- if(recalculateParentDecorations) {
- ISynchronizeModelElement parent = (ISynchronizeModelElement)element.getParent();
- if(parent != null) {
- propagateProblemMarkers(parent, false);
- }
+ } catch (CoreException e) {
+ // the marker has been deleted skip this marker and keep going, or if the resource
+ // does not exist anymore. In anycase this will force parents to be recalculated.
+ // continue;
}
- } catch (CoreException e) {
- // ignore problems on this item and keep going
- return;
+ }
+ // If it doesn't have a direct change, a parent might
+ boolean recalculateParentDecorations = hadProblemProperty(element, property);
+ if (recalculateParentDecorations) {
+ ISynchronizeModelElement parent = (ISynchronizeModelElement) element.getParent();
+ if (parent != null) {
+ propagateProblemMarkers(parent, false);
+ }
}
}
}
@@ -646,6 +639,12 @@
boolean hadError = element.getProperty(ISynchronizeModelElement.PROPAGATED_ERROR_MARKER_PROPERTY);
boolean hadWarning = element.getProperty(ISynchronizeModelElement.PROPAGATED_WARNING_MARKER_PROPERTY);
+ // Force recalculation of parents of phantom resources
+ IResource resource = element.getResource();
+ if(resource != null && resource.isPhantom()) {
+ return true;
+ }
+
if(hadError) {
if(! (property == ISynchronizeModelElement.PROPAGATED_ERROR_MARKER_PROPERTY)) {
element.setPropertyToRoot(ISynchronizeModelElement.PROPAGATED_ERROR_MARKER_PROPERTY, false);