1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 18:26:01 +02:00

Fix bug, no event was sent for the non-c resources.

This commit is contained in:
Alain Magloire 2003-03-31 03:45:25 +00:00
parent c593b78e02
commit 2a0331a18a

View file

@ -5,17 +5,17 @@ package org.eclipse.cdt.internal.core.model;
* All Rights Reserved. * All Rights Reserved.
*/ */
import org.eclipse.core.resources.IProject; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.core.resources.IResource; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IPath;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICElementDelta; import org.eclipse.cdt.core.model.ICElementDelta;
import org.eclipse.cdt.core.model.ICModel; import org.eclipse.cdt.core.model.ICModel;
import org.eclipse.cdt.core.model.ICModelStatusConstants; import org.eclipse.cdt.core.model.ICModelStatusConstants;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IPath;
/** /**
* This class is used by <code>CModelManager</code> to convert * This class is used by <code>CModelManager</code> to convert
@ -58,9 +58,25 @@ public class DeltaProcessor {
* Returns null if none was found. * Returns null if none was found.
*/ */
protected ICElement createElement(IResource resource) { protected ICElement createElement(IResource resource) {
CModelManager manager = CModelManager.getDefault();
if (resource == null) if (resource == null)
return null; return null;
return CModelManager.getDefault().create(resource); ICElement celement = manager.create(resource);
if (celement == null) {
ICElement parent = manager.create(resource.getParent());
// Probably it was deleted, find it
if (parent instanceof IParent) {
ICElement[] children = ((CElement)parent).getElementInfo().getChildren();
for (int i = 0; i < children.length; i++) {
IResource res = children[i].getResource();
if (res != null && res.equals(resource)) {
celement = children[i];
break;
}
}
}
}
return celement;
} }
/** /**
@ -79,40 +95,14 @@ public class DeltaProcessor {
CModelManager.getDefault().releaseCElement(celement); CModelManager.getDefault().releaseCElement(celement);
} }
/**
* Release the Resource.
* Returns null if none was found.
*/
protected void releaseCElement(IResource resource) {
CModelManager.getDefault().releaseCElement(resource);
}
/**
* get the CElement from the hashtable, if it exist without
* creating it.
* Returns null if none was found.
*/
protected ICElement getElement(IResource res) {
return CModelManager.getDefault().getCElement(res);
}
protected ICElement getElement(IPath path) {
return CModelManager.getDefault().getCElement(path);
}
/** /**
* Adds the given child handle to its parent's cache of children. * Adds the given child handle to its parent's cache of children.
*/ */
protected void addToParentInfo(Openable child) { protected void addToParentInfo(Openable child) {
Openable parent = (Openable) child.getParent(); Openable parent = (Openable) child.getParent();
if (parent != null && parent.isOpen()) { if (parent != null && parent.isOpen()) {
//try {
CElementInfo info = (CElementInfo)parent.getElementInfo(); CElementInfo info = (CElementInfo)parent.getElementInfo();
info.addChild(child); info.addChild(child);
//} //catch (CModelException e) {
// do nothing - we already checked if open
//}
} }
} }
@ -133,7 +123,7 @@ public class DeltaProcessor {
if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0) { if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0) {
//ICElement movedFromElement = createElement(delta.getMovedFromPath()); //ICElement movedFromElement = createElement(delta.getMovedFromPath());
if (movedFromElement == null) if (movedFromElement == null)
movedFromElement = getElement(delta.getMovedFromPath()); movedFromElement = createElement(delta.getMovedFromPath());
fCurrentDelta.movedTo(element, movedFromElement); fCurrentDelta.movedTo(element, movedFromElement);
movedFromElement = null; movedFromElement = null;
} else { } else {
@ -322,7 +312,7 @@ public class DeltaProcessor {
protected void traverseDelta(IResourceDelta delta) { protected void traverseDelta(IResourceDelta delta) {
try { try {
if (!updateCurrentDeltaAndIndex(delta)) { if (!updateCurrentDeltaAndIndex(delta)) {
fCurrentDelta.addResourceDelta(delta); nonCResourcesChanged(delta);
} }
} catch (CModelException e) { } catch (CModelException e) {
} }
@ -332,6 +322,20 @@ public class DeltaProcessor {
} }
} }
protected void nonCResourcesChanged(IResourceDelta delta) {
fCurrentDelta.addResourceDelta(delta);
IResource res = delta.getResource();
if (res != null) {
ICElement celem = createElement(res.getParent());
if (celem instanceof CContainer) {
CElementInfo info = ((CContainer)celem).getElementInfo();
if (info instanceof CContainerInfo) {
((CContainerInfo)info).setNonCResources(null);
}
}
}
}
/* /*
* Update the current delta (ie. add/remove/change the given element) and update the * Update the current delta (ie. add/remove/change the given element) and update the
* correponding index. * correponding index.
@ -348,36 +352,37 @@ public class DeltaProcessor {
switch (delta.getKind()) { switch (delta.getKind()) {
case IResourceDelta.ADDED : case IResourceDelta.ADDED :
element = createElement(resource); element = createElement(resource);
if (element == null) if (element != null) {
throw newInvalidElementType();
updateIndexAddResource(element, delta); updateIndexAddResource(element, delta);
elementAdded(element, delta); elementAdded(element, delta);
isProcess = true; isProcess = true;
}
break; break;
case IResourceDelta.REMOVED : case IResourceDelta.REMOVED :
element = getElement(resource); element = createElement(resource);
if (element != null) { if (element != null) {
updateIndexRemoveResource(element, delta); updateIndexRemoveResource(element, delta);
elementRemoved(element, delta); elementRemoved(element, delta);
isProcess = true; isProcess = true;
} else {
releaseCElement(resource);
} }
break; break;
case IResourceDelta.CHANGED : case IResourceDelta.CHANGED :
element = createElement(resource);
if (element == null)
throw newInvalidElementType();
int flags = delta.getFlags(); int flags = delta.getFlags();
if ((flags & IResourceDelta.CONTENT) != 0) { if ((flags & IResourceDelta.CONTENT) != 0) {
// content has changed // content has changed
element = createElement(resource);
if (element != null) {
contentChanged(element, delta); contentChanged(element, delta);
updateIndexAddResource(element, delta); updateIndexAddResource(element, delta);
isProcess = true;
}
} else if ((flags & IResourceDelta.OPEN) != 0) { } else if ((flags & IResourceDelta.OPEN) != 0) {
// project has been opened or closed // project has been opened or closed
IProject res = (IProject)resource; IProject res = (IProject)resource;
element = createElement(resource);
if (element != null) {
if (res.isOpen()) { if (res.isOpen()) {
elementOpened(element, delta); elementOpened(element, delta);
updateIndexAddResource(element, delta); updateIndexAddResource(element, delta);
@ -385,13 +390,15 @@ public class DeltaProcessor {
elementClosed(element, delta); elementClosed(element, delta);
updateIndexRemoveResource(element, delta); updateIndexRemoveResource(element, delta);
} }
// when a project is open/closed don't process children
} else if ((flags & IResourceDelta.DESCRIPTION) != 0) {
elementAdded(element, delta);
} // else if ((flags * IResourceDelta.MARKERS) != 0) {}
// else if ((flags * IResourceDelta.TYPE) != 0) {}
// else if ((flags * IResourceDelta.SYNC) != 0) {}
isProcess = true; isProcess = true;
}
} else if ((flags & IResourceDelta.DESCRIPTION) != 0) {
element = createElement(resource);
if (element != null) {
elementAdded(element, delta);
isProcess = true;
}
}
break; break;
} }
return isProcess; return isProcess;