mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-03 13:43:31 +02:00
Check for non C resources changes
This commit is contained in:
parent
5229f48934
commit
2e88ab007f
1 changed files with 55 additions and 3 deletions
|
@ -11,6 +11,7 @@ import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
import org.eclipse.cdt.core.model.IArchive;
|
import org.eclipse.cdt.core.model.IArchive;
|
||||||
import org.eclipse.cdt.core.model.IBinary;
|
import org.eclipse.cdt.core.model.IBinary;
|
||||||
|
import org.eclipse.cdt.core.model.ICContainer;
|
||||||
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;
|
||||||
|
@ -19,6 +20,8 @@ import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
import org.eclipse.cdt.core.model.IParent;
|
import org.eclipse.cdt.core.model.IParent;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.ui.BaseCElementContentProvider;
|
import org.eclipse.cdt.internal.ui.BaseCElementContentProvider;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.jface.viewers.StructuredViewer;
|
import org.eclipse.jface.viewers.StructuredViewer;
|
||||||
|
@ -99,7 +102,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kind == ICElementDelta.REMOVED) {
|
if (kind == ICElementDelta.REMOVED) {
|
||||||
Object parent = getParent(element);
|
Object parent = internalGetParent(element);
|
||||||
postRemove(element);
|
postRemove(element);
|
||||||
if (updateContainer(element)) {
|
if (updateContainer(element)) {
|
||||||
postRefresh(parent);
|
postRefresh(parent);
|
||||||
|
@ -107,7 +110,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kind == ICElementDelta.ADDED) {
|
if (kind == ICElementDelta.ADDED) {
|
||||||
Object parent= getParent(element);
|
Object parent= internalGetParent(element);
|
||||||
postAdd(parent, element);
|
postAdd(parent, element);
|
||||||
if (updateContainer(element)) {
|
if (updateContainer(element)) {
|
||||||
postRefresh(parent);
|
postRefresh(parent);
|
||||||
|
@ -127,6 +130,13 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (delta.getResourceDeltas() != null) {
|
||||||
|
IResourceDelta[] rd= delta.getResourceDeltas();
|
||||||
|
for (int i= 0; i < rd.length; i++) {
|
||||||
|
processResourceDelta(rd[i], element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ICElementDelta[] affectedChildren= delta.getAffectedChildren();
|
ICElementDelta[] affectedChildren= delta.getAffectedChildren();
|
||||||
for (int i= 0; i < affectedChildren.length; i++) {
|
for (int i= 0; i < affectedChildren.length; i++) {
|
||||||
processDelta(affectedChildren[i]);
|
processDelta(affectedChildren[i]);
|
||||||
|
@ -138,6 +148,48 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Process resource deltas
|
||||||
|
*/
|
||||||
|
private void processResourceDelta(IResourceDelta delta, Object parent) {
|
||||||
|
int status= delta.getKind();
|
||||||
|
IResource resource= delta.getResource();
|
||||||
|
// filter out changes affecting the output folder
|
||||||
|
if (resource == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this could be optimized by handling all the added children in the parent
|
||||||
|
if ((status & IResourceDelta.REMOVED) != 0) {
|
||||||
|
if (!(parent instanceof ICContainer)) {
|
||||||
|
// refresh one level above to deal with empty package filtering properly
|
||||||
|
postRefresh(internalGetParent(parent));
|
||||||
|
} else {
|
||||||
|
postRemove(resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((status & IResourceDelta.ADDED) != 0) {
|
||||||
|
if (!(parent instanceof ICContainer)) {
|
||||||
|
// refresh one level above to deal with empty package filtering properly
|
||||||
|
postRefresh(internalGetParent(parent));
|
||||||
|
} else {
|
||||||
|
postAdd(parent, resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IResourceDelta[] affectedChildren= delta.getAffectedChildren();
|
||||||
|
|
||||||
|
if (affectedChildren.length > 1) {
|
||||||
|
// more than one child changed, refresh from here downwards
|
||||||
|
postRefresh(resource);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i= 0; i < affectedChildren.length; i++) {
|
||||||
|
processResourceDelta(affectedChildren[i], resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// private void updateContainer(ICModel root) {
|
// private void updateContainer(ICModel root) {
|
||||||
// postRunnable(new Runnable() {
|
// postRunnable(new Runnable() {
|
||||||
// public void run () {
|
// public void run () {
|
||||||
|
@ -240,7 +292,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
Control ctrl= fViewer.getControl();
|
Control ctrl= fViewer.getControl();
|
||||||
if (ctrl != null && !ctrl.isDisposed())
|
if (ctrl != null && !ctrl.isDisposed())
|
||||||
// fViewer.remove(element);
|
// fViewer.remove(element);
|
||||||
fViewer.refresh(getParent(element));
|
fViewer.refresh(internalGetParent(element));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue