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:
parent
448137a376
commit
fa0e36d942
2 changed files with 21 additions and 2 deletions
|
@ -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());
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Add table
Reference in a new issue