1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for [Bug 201773] ResourceChangeHandlerBase will visit every resource change even if not from a cproject

This commit is contained in:
Mikhail Sennikovsky 2007-09-05 11:44:45 +00:00
parent 448137a376
commit fa0e36d942
2 changed files with 21 additions and 2 deletions

View file

@ -14,6 +14,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeEvent;
@ -74,6 +75,9 @@ public abstract class ResourceChangeHandlerBase implements IResourceChangeListen
public boolean visit(IResourceDelta delta) throws CoreException { public boolean visit(IResourceDelta delta) throws CoreException {
IResource dResource = delta.getResource(); IResource dResource = delta.getResource();
if(dResource.getType() == IResource.PROJECT && !shouldVisit((IProject)dResource))
return false;
boolean resume = true; boolean resume = true;
boolean removed = false; boolean removed = false;
@ -126,10 +130,21 @@ public abstract class ResourceChangeHandlerBase implements IResourceChangeListen
} }
} }
protected boolean shouldVisit(IProject project){
try {
return project.isOpen() ? project.hasNature(CProjectNature.C_NATURE_ID) : true;
} catch (CoreException e) {
CCorePlugin.log(e);
return false;
}
}
protected void doHahdleResourceMove(IResourceChangeEvent event, IResourceMoveHandler handler){ protected void doHahdleResourceMove(IResourceChangeEvent event, IResourceMoveHandler handler){
switch (event.getType()) { switch (event.getType()) {
case IResourceChangeEvent.PRE_CLOSE: case IResourceChangeEvent.PRE_CLOSE:
handler.handleProjectClose((IProject)event.getResource()); IProject project = (IProject)event.getResource();
if(shouldVisit(project))
handler.handleProjectClose(project);
break; break;
// case IResourceChangeEvent.PRE_DELETE : // case IResourceChangeEvent.PRE_DELETE :
// handler.handleResourceRemove(event.getResource()); // handler.handleResourceRemove(event.getResource());

View file

@ -334,7 +334,11 @@ public class ResourceChangeHandler extends ResourceChangeHandlerBase implements
if(delta != null){ if(delta != null){
IResourceDelta projs[] = delta.getAffectedChildren(); IResourceDelta projs[] = delta.getAffectedChildren();
for(int i = 0; i < projs.length; i++){ for(int i = 0; i < projs.length; i++){
IResourceDelta children[] = projs[i].getAffectedChildren(); IResourceDelta projDelta = projs[i];
if(!shouldVisit((IProject)projDelta.getResource()))
continue;
IResourceDelta children[] = projDelta.getAffectedChildren();
for(int k = 0; k < children.length; k++){ for(int k = 0; k < children.length; k++){
IResourceDelta child = children[k]; IResourceDelta child = children[k];
IResource rc = child.getResource(); IResource rc = child.getResource();