Author: tcurdt
Date: Sun Apr  1 07:58:34 2007
New Revision: 524610

URL: http://svn.apache.org/viewvc?view=rev&rev=524610
Log:
http://issues.apache.org/bugzilla/show_bug.cgi?id=39695


Modified:
    jakarta/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java

Modified: 
jakarta/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
URL: 
http://svn.apache.org/viewvc/jakarta/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java?view=diff&rev=524610&r1=524609&r2=524610
==============================================================================
--- jakarta/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java 
(original)
+++ jakarta/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java Sun 
Apr  1 07:58:34 2007
@@ -32,6 +32,7 @@
 import org.apache.bcel.classfile.LineNumberTable;
 import org.apache.bcel.classfile.LocalVariable;
 import org.apache.bcel.classfile.LocalVariableTable;
+import org.apache.bcel.classfile.LocalVariableTypeTable;
 import org.apache.bcel.classfile.Method;
 import org.apache.bcel.classfile.ParameterAnnotationEntry;
 import org.apache.bcel.classfile.ParameterAnnotations;
@@ -237,6 +238,23 @@
                             addLocalVariable(l.getName(), 
Type.getType(l.getSignature()), l
                                     .getIndex(), start, end);
                         }
+                    } else if (a instanceof LocalVariableTypeTable) {
+                        LocalVariable[] lv = ((LocalVariableTypeTable) 
a).getLocalVariableTypeTable();
+                        removeLocalVariables();
+                        for (int k = 0; k < lv.length; k++) {
+                            LocalVariable l = lv[k];
+                            InstructionHandle start = 
il.findHandle(l.getStartPC());
+                            InstructionHandle end = 
il.findHandle(l.getStartPC() + l.getLength());
+                            // Repair malformed handles
+                            if (null == start) {
+                                start = il.getStart();
+                            }
+                            if (null == end) {
+                                end = il.getEnd();
+                            }
+                            addLocalVariable(l.getName(), 
Type.getType(l.getSignature()), l
+                                    .getIndex(), start, end);
+                        }
                     } else {
                         addCodeAttribute(a);
                     }
@@ -1062,6 +1080,13 @@
         signature = Utility.methodSignatureToString(signature, name, access, 
true,
                 getLocalVariableTable(cp));
         StringBuffer buf = new StringBuffer(signature);
+        for (int i = 0; i < getAttributes().length; i++) {
+            Attribute a = getAttributes()[i];
+            if (!((a instanceof Code) || (a instanceof ExceptionTable))) {
+                buf.append(" [").append(a.toString()).append("]");
+            }
+        }
+        
         if (throws_vec.size() > 0) {
             for (Iterator e = throws_vec.iterator(); e.hasNext();) {
                 buf.append("\n\t\tthrows ").append(e.next());



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to