From 196254955b56a40c62c2b6fb0960388e6d595c80 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 28 Sep 2006 08:47:09 +0000 Subject: [PATCH] Fix interface of ElfBinaryArchive to allow proper derivation --- .../utils/elf/parser/ElfBinaryArchive.java | 23 +++++++++++++------ .../utils/elf/parser/GNUElfBinaryArchive.java | 18 ++++----------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryArchive.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryArchive.java index 61961b6beba..fd4a30afd6b 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryArchive.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryArchive.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.utils.elf.parser; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryArchive; @@ -26,7 +27,7 @@ import org.eclipse.core.runtime.IPath; */ public class ElfBinaryArchive extends BinaryFile implements IBinaryArchive { - ArrayList children; + private ArrayList children; public ElfBinaryArchive(IBinaryParser parser, IPath p) throws IOException { super(parser, p, IBinaryFile.ARCHIVE); @@ -44,7 +45,8 @@ public class ElfBinaryArchive extends BinaryFile implements IBinaryArchive { try { ar = new AR(getPath().toOSString()); AR.ARHeader[] headers = ar.getHeaders(); - addArchiveMembers(headers, children); + IBinaryObject[] bobjs= createArchiveMembers(headers); + children.addAll(Arrays.asList(bobjs)); } catch (IOException e) { //e.printStackTrace(); } @@ -56,14 +58,21 @@ public class ElfBinaryArchive extends BinaryFile implements IBinaryArchive { return (IBinaryObject[]) children.toArray(new IBinaryObject[0]); } + protected IBinaryObject[] createArchiveMembers(ARHeader[] headers) { + IBinaryObject[] result= new IBinaryObject[headers.length]; + for (int i = 0; i < headers.length; i++) { + result[i]= new ElfBinaryObject(getBinaryParser(), getPath(), headers[i]); + } + return result; + } + /** * @param headers * @param children2 + * @deprecated use {@link ElfBinaryArchive#createArchiveMembers(ARHeader[])} */ - protected void addArchiveMembers(ARHeader[] headers, ArrayList children2) { - for (int i = 0; i < headers.length; i++) { - IBinaryObject bin = new ElfBinaryObject(getBinaryParser(), getPath(), headers[i]); - children.add(bin); - } + protected void addArchiveMembers(ARHeader[] headers, ArrayList children) { + IBinaryObject[] bobjs= createArchiveMembers(headers); + children.addAll(Arrays.asList(bobjs)); } } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryArchive.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryArchive.java index 30af50c20ed..366c51c6756 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryArchive.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryArchive.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.elf.parser; import java.io.IOException; -import java.util.ArrayList; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; @@ -21,24 +20,15 @@ import org.eclipse.core.runtime.IPath; public class GNUElfBinaryArchive extends ElfBinaryArchive { - /** - * @param parser - * @param p - * @throws IOException - */ public GNUElfBinaryArchive(IBinaryParser parser, IPath p) throws IOException { super(parser, p); } - - /* (non-Javadoc) - * @see org.eclipse.cdt.utils.elf.parser.BinaryArchive#addArchiveMembers(org.eclipse.cdt.utils.elf.AR.ARHeader[], java.util.ArrayList) - */ - protected void addArchiveMembers(ARHeader[] headers, ArrayList children2) { + protected IBinaryObject[] createArchiveMembers(ARHeader[] headers) { + IBinaryObject[] result= new IBinaryObject[headers.length]; for (int i = 0; i < headers.length; i++) { - IBinaryObject bin = new GNUElfBinaryObject(getBinaryParser(), getPath(), headers[i]); - children.add(bin); + result[i] = new GNUElfBinaryObject(getBinaryParser(), getPath(), headers[i]); } + return result; } - }