diff options
author | Igor Fedorenko | 2012-01-11 01:58:56 +0000 |
---|---|---|
committer | Igor Fedorenko | 2012-01-11 18:35:08 +0000 |
commit | 69bf9f4d8b656318084aa69fee2a7f9abb4531cf (patch) | |
tree | f184327c1f171372b097f107e781549f40dcd7c7 /org.eclipse.m2e.core | |
parent | 3fb9523fe4e80096f92aaca46fcf2b67ec0ea7f1 (diff) | |
download | m2e-core-69bf9f4d8b656318084aa69fee2a7f9abb4531cf.tar.gz m2e-core-69bf9f4d8b656318084aa69fee2a7f9abb4531cf.tar.xz m2e-core-69bf9f4d8b656318084aa69fee2a7f9abb4531cf.zip |
368380 refreshLocal of all out-of-sync parent folders
As a workaround for bug 368376, do refreshLocal(DEPTH_ONE)
on all enclosing out-of-sync containers of the resources
reported for refresh via BuildContext.refresh API.
Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r-- | org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java index 8f8f0a47..49907418 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -28,8 +29,7 @@ import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -191,21 +191,35 @@ public class MavenBuilderImpl { continue; // odd } + IResource resource; if(!file.exists()) { - IResource resource = project.findMember(path); - if(resource != null) { - resource.refreshLocal(IResource.DEPTH_INFINITE, monitor); - } + resource = project.findMember(path); } else if(file.isDirectory()) { - IFolder ifolder = project.getFolder(path); - ifolder.refreshLocal(IResource.DEPTH_INFINITE, monitor); + resource = project.getFolder(path); } else { - IFile ifile = project.getFile(path); - ifile.refreshLocal(IResource.DEPTH_ZERO, monitor); + resource = project.getFile(path); + } + if(resource != null) { + workaroundBug368376(resource, monitor); + resource.refreshLocal(IResource.DEPTH_INFINITE, monitor); } } } + void workaroundBug368376(IResource resource, IProgressMonitor monitor) throws CoreException { + // refreshing a new file does not automatically refresh enclosing new folders + // refreshLocal(IResource.DEPTH_ONE) on all out-of-sync parents seems to be the least expansive way to refresh + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=368376 + List<IContainer> parents = new LinkedList<IContainer>(); + for(IContainer parent = resource.getParent(); parent != null && !parent.isSynchronized(IResource.DEPTH_ZERO); parent = parent + .getParent()) { + parents.add(0, parent); + } + for(IContainer parent : parents) { + parent.refreshLocal(IResource.DEPTH_ONE, monitor); + } + } + public static IPath getProjectRelativePath(IProject project, File file) { if(project == null || file == null) { return null; |