diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Archive.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Archive.java index e72e61d1bf8..47d27872a2c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Archive.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Archive.java @@ -5,11 +5,9 @@ package org.eclipse.cdt.internal.core.model; * All Rights Reserved. */ -import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.IArchive; import org.eclipse.cdt.core.model.IBinary; import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.internal.core.model.parser.BinaryContainerAdapter; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; @@ -25,13 +23,6 @@ public class Archive extends CFile implements IArchive { public Archive(ICElement parent, IPath path) { super (parent, path); } - - public IResource getResource() throws CModelException { - if (archive == null) { - archive = new BinaryContainerAdapter(getArchiveInfo().getBinaryArchive()); - } - return archive; - } public IBinary[] getBinaries() { ICElement[] e = getChildren(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveInfo.java index fc0d8de3570..76fb050a7d1 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ArchiveInfo.java @@ -13,8 +13,6 @@ import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.internal.core.model.parser.BinaryFileAdapter; -import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -41,27 +39,25 @@ class ArchiveInfo extends CFileInfo { res = getElement().getResource(); } catch (CModelException e) { } - if (res != null && res instanceof IContainer) { - IContainer container = (IContainer)res; - IBinaryArchive ar = getBinaryArchive(); - IBinaryObject[] objects = ar.getObjects(); - for (int i = 0; i < objects.length; i++) { - final IBinaryObject obj = objects[i]; - IFile file = new BinaryFileAdapter(container, obj); - Binary binary = new Binary(getElement(), file) { - public CElementInfo createElementInfo() { - return new BinaryInfo(this) { - /** - * @see org.eclipse.cdt.internal.core.model.BinaryInfo#getBinaryObject() - */ - IBinaryObject getBinaryObject() { - return obj; - } - }; - } - }; - addChild(binary); - } + IBinaryArchive ar = getBinaryArchive(); + IBinaryObject[] objects = ar.getObjects(); + for (int i = 0; i < objects.length; i++) { + final IBinaryObject obj = objects[i]; + Binary binary = new Binary(getElement(), res.getLocation().append(obj.getName())) { + public CElementInfo createElementInfo() { + return new BinaryInfo(this) { + /** + * @see org.eclipse.cdt.internal.core.model.BinaryInfo#getBinaryObject() + */ + IBinaryObject getBinaryObject() { + return obj; + } + }; + } + }; + BinaryInfo info = (BinaryInfo)binary.getElementInfo(); + info.loadChildren(); + addChild(binary); } } return super.getChildren(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java index 9c94c387cbe..1b08929d56a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java @@ -38,25 +38,7 @@ class BinaryInfo extends CFileInfo { public ICElement[] getChildren() { if (hasChanged()) { - if (hash == null) { - hash = new HashMap(); - } - hash.clear(); - removeChildren(); - setIsStructureKnown(true); - IBinaryObject bin = getBinaryObject(); - ISymbol[] symbols = bin.getSymbols(); - for (int i = 0; i < symbols.length; i++) { - switch (symbols[i].getType()) { - case ISymbol.FUNCTION : - addFunction(symbols[i]); - break; - - case ISymbol.VARIABLE : - addVariable(symbols[i]); - break; - } - } + loadChildren(); } return super.getChildren(); } @@ -156,6 +138,28 @@ class BinaryInfo extends CFileInfo { } return false; } + + void loadChildren() { + if (hash == null) { + hash = new HashMap(); + } + hash.clear(); + removeChildren(); + setIsStructureKnown(true); + IBinaryObject bin = getBinaryObject(); + ISymbol[] symbols = bin.getSymbols(); + for (int i = 0; i < symbols.length; i++) { + switch (symbols[i].getType()) { + case ISymbol.FUNCTION : + addFunction(symbols[i]); + break; + + case ISymbol.VARIABLE : + addVariable(symbols[i]); + break; + } + } + } IBinaryObject getBinaryObject() { if (binary == null) {