Bug 43511 - AnnotationDefault needs a dump method
Summary: AnnotationDefault needs a dump method
Status: CLOSED FIXED
Alias: None
Product: BCEL - Now in Jira
Classification: Unclassified
Component: Main (show other bugs)
Version: 5.3
Hardware: All All
: P2 normal
Target Milestone: ---
Assignee: issues@commons.apache.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-09-28 15:23 UTC by cfeldmann
Modified: 2007-09-29 02:30 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description cfeldmann 2007-09-28 15:23:04 UTC
While using bcel to read in and then write out an annotation that has a default
value without making any changes to it, I discovered that the resulting class
did not contain the annotation default.  The annotation looks something like this:

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME)
public @interface Foo
{
   String name() default "";
}

The missing bytes caused a (very misleading) NoClassDefFoundError when I tried
to load the new class.  
When I tried to decompile the new class, I got this error:
ItemCollectionInvalidIndex: constants: requested 1280, limit 27

After comparing the original class with the new class in a hex editor, I
determined that the bytes for the AnnotationDefault were missing.  The problem
is that the AnnotationDefault class does not have a dump method.  I added a dump
method and this fixed the problem.  Here's a diff of the new method:

$ svn diff
Index: src/main/java/org/apache/bcel/classfile/AnnotationDefault.java
===================================================================
--- src/main/java/org/apache/bcel/classfile/AnnotationDefault.java     
(revision 573325)
+++ src/main/java/org/apache/bcel/classfile/AnnotationDefault.java      (working
copy)
@@ -18,6 +18,7 @@

 import java.io.DataInputStream;
 import java.io.IOException;
+import java.io.DataOutputStream;
 import org.apache.bcel.Constants;

 /**
@@ -105,4 +106,10 @@
        {
                throw new RuntimeException("Not implemented yet!");
        }
+
+    public final void dump(DataOutputStream dos) throws IOException
+    {
+      super.dump(dos);
+      default_value.dump(dos);
+    }
 }
Comment 1 Torsten Curdt 2007-09-29 02:30:07 UTC
Thanks, applied to trunk