Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2012-01-11 01:58:56 +0000
committerIgor Fedorenko2012-01-11 18:35:08 +0000
commit69bf9f4d8b656318084aa69fee2a7f9abb4531cf (patch)
treef184327c1f171372b097f107e781549f40dcd7c7 /org.eclipse.m2e.core
parent3fb9523fe4e80096f92aaca46fcf2b67ec0ea7f1 (diff)
downloadm2e-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.java34
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;

Back to the top