aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/javassist/bytecode/ClassFile.java
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2005-01-12 16:09:47 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2005-01-12 16:09:47 +0000
commite793a77000f14fd8272388f7b2878a54e2d628ca (patch)
tree47c705d645288afd4bc39a87a4baf80154222401 /src/main/javassist/bytecode/ClassFile.java
parent91895bb38cf5cf4feaf8dcb3ba76555d67d765db (diff)
downloadjavassist-e793a77000f14fd8272388f7b2878a54e2d628ca.tar.gz
javassist-e793a77000f14fd8272388f7b2878a54e2d628ca.zip
implemented removeMethod() etc.
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@151 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src/main/javassist/bytecode/ClassFile.java')
-rw-r--r--src/main/javassist/bytecode/ClassFile.java42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/main/javassist/bytecode/ClassFile.java b/src/main/javassist/bytecode/ClassFile.java
index 4f85f667..5c4bc1cc 100644
--- a/src/main/javassist/bytecode/ClassFile.java
+++ b/src/main/javassist/bytecode/ClassFile.java
@@ -99,13 +99,33 @@ public final class ClassFile {
}
/**
- * Discards all attributes, associated with both the class file and
- * the members such as a code attribute and exceptions attribute.
- * The unused constant pool entries are also discarded (a new packed
- * constant pool is constructed).
+ * Eliminates dead constant pool items. If a method or a field is removed,
+ * the constant pool items used by that method/field become dead items.
+ * This method recreates a constant pool.
*/
- public void prune() {
+ public void compact() {
+ ConstPool cp = compact0();
+ ArrayList list = methods;
+ int n = list.size();
+ for (int i = 0; i < n; ++i) {
+ MethodInfo minfo = (MethodInfo)list.get(i);
+ minfo.compact(cp);
+ }
+
+ list = fields;
+ n = list.size();
+ for (int i = 0; i < n; ++i) {
+ FieldInfo finfo = (FieldInfo)list.get(i);
+ finfo.compact(cp);
+ }
+
+ attributes = AttributeInfo.copyAll(attributes, cp);
+ constPool = cp;
+ }
+
+ private ConstPool compact0() {
ConstPool cp = new ConstPool(thisclassname);
+ thisClass = cp.getThisClassInfo();
superClass = cp.addClassInfo(getSuperclass());
if (interfaces != null) {
@@ -115,6 +135,18 @@ public final class ClassFile {
= cp.addClassInfo(constPool.getClassInfo(interfaces[i]));
}
+ return cp;
+ }
+
+ /**
+ * Discards all attributes, associated with both the class file and
+ * the members such as a code attribute and exceptions attribute.
+ * The unused constant pool entries are also discarded (a new packed
+ * constant pool is constructed).
+ */
+ public void prune() {
+ ConstPool cp = compact0();
+
ArrayList list = methods;
int n = list.size();
for (int i = 0; i < n; ++i) {