src/com/sun/org/apache/bcel/internal/generic/MethodGen.java

Print this page




 241 
 242             removeLocalVariables();
 243 
 244             for(int k=0; k < lv.length; k++) {
 245               LocalVariable     l     = lv[k];
 246               InstructionHandle start = il.findHandle(l.getStartPC());
 247               InstructionHandle end   = il.findHandle(l.getStartPC() + l.getLength());
 248 
 249               // Repair malformed handles
 250               if(null == start) {
 251                 start = il.getStart();
 252               }
 253 
 254               if(null == end) {
 255                 end = il.getEnd();
 256               }
 257 
 258               addLocalVariable(l.getName(), Type.getType(l.getSignature()),
 259                                l.getIndex(), start, end);
 260             }

















 261           } else
 262             addCodeAttribute(a);
 263         }
 264       } else if(a instanceof ExceptionTable) {
 265         String[] names = ((ExceptionTable)a).getExceptionNames();
 266         for(int j=0; j < names.length; j++)
 267           addException(names[j]);
 268       } else
 269         addAttribute(a);
 270     }
 271   }
 272 
 273   /**
 274    * Adds a local variable to this method.
 275    *
 276    * @param name variable name
 277    * @param type variable type
 278    * @param slot the index of the local variable, if type is long or double, the next available
 279    * index is slot+2
 280    * @param start from where the variable is valid




 241 
 242             removeLocalVariables();
 243 
 244             for(int k=0; k < lv.length; k++) {
 245               LocalVariable     l     = lv[k];
 246               InstructionHandle start = il.findHandle(l.getStartPC());
 247               InstructionHandle end   = il.findHandle(l.getStartPC() + l.getLength());
 248 
 249               // Repair malformed handles
 250               if(null == start) {
 251                 start = il.getStart();
 252               }
 253 
 254               if(null == end) {
 255                 end = il.getEnd();
 256               }
 257 
 258               addLocalVariable(l.getName(), Type.getType(l.getSignature()),
 259                                l.getIndex(), start, end);
 260             }
 261           } else if (a instanceof LocalVariableTypeTable) {
 262              LocalVariable[] lv = ((LocalVariableTypeTable) a).getLocalVariableTypeTable();
 263              removeLocalVariables();
 264              for (int k = 0; k < lv.length; k++) {
 265                  LocalVariable l = lv[k];
 266                  InstructionHandle start = il.findHandle(l.getStartPC());
 267                  InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength());
 268                  // Repair malformed handles
 269                  if (null == start) {
 270                      start = il.getStart();
 271                  }
 272                  if (null == end) {
 273                      end = il.getEnd();
 274                  }
 275                  addLocalVariable(l.getName(), Type.getType(l.getSignature()), l
 276                          .getIndex(), start, end);
 277               }
 278           } else
 279             addCodeAttribute(a);
 280         }
 281       } else if(a instanceof ExceptionTable) {
 282         String[] names = ((ExceptionTable)a).getExceptionNames();
 283         for(int j=0; j < names.length; j++)
 284           addException(names[j]);
 285       } else
 286         addAttribute(a);
 287     }
 288   }
 289 
 290   /**
 291    * Adds a local variable to this method.
 292    *
 293    * @param name variable name
 294    * @param type variable type
 295    * @param slot the index of the local variable, if type is long or double, the next available
 296    * index is slot+2
 297    * @param start from where the variable is valid