From d36366a47c2d533edd2f49a33a94c265a1369616 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Mon, 23 Sep 2002 16:44:44 +0000 Subject: [PATCH] make getChildren async for bin and arc containers --- .../internal/core/model/ArchiveContainer.java | 14 ++------- .../internal/core/model/BinaryContainer.java | 31 ------------------- .../internal/core/model/CModelManager.java | 19 ++++++------ .../ui/BaseCElementContentProvider.java | 5 +-- 4 files changed, 16 insertions(+), 53 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveContainer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveContainer.java index 17a381f5926..c6f69d498e7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveContainer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveContainer.java @@ -28,18 +28,18 @@ public class ArchiveContainer extends Parent implements IArchiveContainer { } public IArchive[] getArchives() { - ICElement[] e = getChildren(false); + ICElement[] e = getChildren(true); IArchive[] a = new IArchive[e.length]; System.arraycopy(e, 0, a, 0, e.length); return a; } public boolean hasChildren() { - return (getChildren().length > 0); + return (getChildren(true).length > 0); } public ICElement [] getChildren() { - return getChildren(true); + return getChildren(false); } public ICElement [] getChildren(boolean sync) { @@ -61,14 +61,6 @@ public class ArchiveContainer extends Parent implements IArchiveContainer { return super.getChildren(); } - //public IResource getUnderlyingResource() { - // return null; - //} - -// public IResource getCorrespondingResource() { -// return null; -// } - void addChildIfLib(IFile file) { CModelManager factory = CModelManager.getDefault(); if (factory.isArchive(file)) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryContainer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryContainer.java index 63c2fd8fb7a..8e22ff3046a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryContainer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryContainer.java @@ -113,35 +113,4 @@ public class BinaryContainer extends Parent implements IBinaryContainer { return true; } } - - class BinaryRunnable implements Runnable { - BinaryContainer cbin; - - public BinaryRunnable(BinaryContainer element) { - cbin = element; - } - - public void run() { - try { - ((IProject)cbin.getCProject().getUnderlyingResource()).accept(new Visitor(cbin)); - } catch (CoreException e) { - //e.printStackTrace(); - } - // Fired the event. - ICElement[] children = cbin.getChildren(); - if (children.length > 0) { - CModelManager factory = CModelManager.getDefault(); - ICElement root = (ICRoot)factory.getCRoot(); - CElementDelta cdelta = new CElementDelta(root); - cdelta.added(cbin.getCProject()); - cdelta.added(cbin); - for (int i = 0; i < children.length; i++) { - ICElement child = children[i]; - cdelta.added(child); - } - factory.registerCModelDelta(cdelta); - factory.fire(); - } - } - } } 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 f5fc20f0669..bcd7540c512 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 @@ -319,16 +319,17 @@ public class CModelManager implements IResourceChangeListener { } private void removeChildrenContainer(Parent container, IResource resource) { - ICElement[] children = container.getChildren(); - for (int i = 0; i < children.length; i++) { - try { - IResource r = children[i].getUnderlyingResource(); - if (r.equals(resource)) { -//System.out.println("RELEASE Archive/binary " + children[i].getElementName()); - container.removeChild(children[i]); - break; + if ( container.hasChildren() ) { + ICElement[] children = container.getChildren(); + for (int i = 0; i < children.length; i++) { + try { + IResource r = children[i].getUnderlyingResource(); + if (r.equals(resource)) { + container.removeChild(children[i]); + break; + } + } catch (CModelException e) { } - } catch (CModelException e) { } } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java index 9636a1b3da0..b235f923acc 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java @@ -123,8 +123,9 @@ public class BaseCElementContentProvider implements ITreeContentProvider { for( int i = 0; i < children.length; i++ ) { // Note, here we are starting the Archive and binary containers thread upfront. if (children[i] instanceof IArchiveContainer || children[i] instanceof IBinaryContainer) { - ((IParent)children[i]).getChildren(); - continue; + if ( ((IParent)children[i]).getChildren().length == 0 ) { + continue; + } } list.add(children[i]); }