Uploaded image for project: 'Commons BCEL'
  1. Commons BCEL
  2. BCEL-113

AnnotationDefault needs a dump method

    Details

    • Type: Bug
    • Status: Closed
    • Resolution: Fixed
    • Affects Version/s: 5.3
    • Fix Version/s: None
    • Component/s: Main
    • Labels:
      None
    • Environment:

      Operating System: All
      Platform: All

      Description

      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); + }

      }

        Attachments

          Activity

            People

            • Assignee:
              issues@commons.apache.org Apache Commons Developers
              Reporter:
              cfeldmann@rogers.com cfeldmann
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: