From 7ba1b68964f2740dcf563e5823c09cb2dde86f84 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Mon, 1 Mar 2004 02:03:16 +0000 Subject: [PATCH] Performance improving in the DeltaProcessor --- core/org.eclipse.cdt.core/ChangeLog | 14 ++++++++++++++ .../internal/core/model/CContainerInfo.java | 18 +++++++++++++++--- .../cdt/internal/core/model/CModelManager.java | 6 ++++++ .../internal/core/model/DeltaProcessor.java | 16 +++++++++++----- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 2f2f796eadb..47b74cf5cac 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,17 @@ +2004-02-29 Alain Magloire + + Performance improvements in the Deltaprocessing + In the CContainerInfo.nonCResources() do not try + to recreate the ICElement. + Fire Deltas when Binaries are deleted to update + the BinaryContainer. + The DeltaProcessor was close()ing the Openable + uncessary leading to performance lost. + + * model/org/eclipse/cdt/internal/core/model/CContainerInfo.java + * model/org/eclipse/cdt/internal/core/model/CModelManager.java + * model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java + 2004-02-28 Alain Magloire Fix PE Parser diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java index 7973ea3805a..287e0135365 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java @@ -59,11 +59,23 @@ public class CContainerInfo extends OpenableInfo { if (resources != null) { CModelManager factory = CModelManager.getDefault(); for (int i = 0; i < resources.length; i++) { - // Check for Valid C projects only. - ICElement celement = factory.create(parent, resources[i]); - if (celement == null) { + ICElement[] children = getChildren(); + boolean found = false; + for (int j = 0; j < children.length; j++) { + IResource r = children[j].getResource(); + if (r.equals(resources[i])){ + found = true; + break; + } + } + if (!found) { notChildren.add(resources[i]); } + // Check for Valid C projects only. + //ICElement celement = factory.create(parent, resources[i]); + //if (celement == null) { + // notChildren.add(resources[i]); + //} } } } catch (CoreException e) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 70ef3597abb..6a21cfeb9bd 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -311,12 +311,18 @@ public class CModelManager implements IResourceChangeListener { CProject cproj = (CProject)celement.getCProject(); ArchiveContainer container = (ArchiveContainer)cproj.getArchiveContainer(); container.removeChild(celement); + CElementDelta delta = new CElementDelta(getCModel()); + delta.changed(container, ICElementDelta.CHANGED); + registerCModelDelta(delta); } else if (type == ICElement.C_BINARY) { if (! ((IBinary)celement).isObject()) { //System.out.println("RELEASE Binary " + cfile.getElementName()); CProject cproj = (CProject)celement.getCProject(); BinaryContainer container = (BinaryContainer)cproj.getBinaryContainer(); container.removeChild(celement); + CElementDelta delta = new CElementDelta(getCModel()); + delta.changed(container, ICElementDelta.CHANGED); + registerCModelDelta(delta); } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java index 6645bf2a08e..102bad9103b 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java @@ -375,10 +375,19 @@ public class DeltaProcessor { } } + /** + * Add the resource delta to the right CElementDelta tree. + * @param parent + * @param delta + */ protected void nonCResourcesChanged(ICElement parent, IResourceDelta delta) { CElementDelta elementDelta = fCurrentDelta.find(parent); if (elementDelta == null) { fCurrentDelta.changed(parent, ICElementDelta.F_CONTENT); + elementDelta = fCurrentDelta.find(parent); + if (elementDelta != null) { + elementDelta.addResourceDelta(delta); + } } else { elementDelta.addResourceDelta(delta); } @@ -443,15 +452,12 @@ public class DeltaProcessor { updateIndexRemoveResource(element, delta); } } - } else if ((flags & IResourceDelta.DESCRIPTION) != 0) { + } + if ((flags & IResourceDelta.DESCRIPTION) != 0) { if (element != null) { elementAdded(element, delta); } - } else if (element != null) { - elementChanged(element, delta); } - } else if (element != null) { - elementChanged(element, delta); } break; }