Home | History | Annotate | Download | only in editor
      1 /*
      2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
      3  *             of Java bytecode.
      4  *
      5  * Copyright (c) 2002-2009 Eric Lafortune (eric (at) graphics.cornell.edu)
      6  *
      7  * This program is free software; you can redistribute it and/or modify it
      8  * under the terms of the GNU General Public License as published by the Free
      9  * Software Foundation; either version 2 of the License, or (at your option)
     10  * any later version.
     11  *
     12  * This program is distributed in the hope that it will be useful, but WITHOUT
     13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
     15  * more details.
     16  *
     17  * You should have received a copy of the GNU General Public License along
     18  * with this program; if not, write to the Free Software Foundation, Inc.,
     19  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     20  */
     21 package proguard.classfile.editor;
     22 
     23 import proguard.classfile.attribute.*;
     24 
     25 /**
     26  * This class can add local variables to a given local variable type table
     27  * attribute.
     28  * Local variable types to be added must have been filled out beforehand.
     29  *
     30  * @author Eric Lafortune
     31  */
     32 public class LocalVariableTypeTableAttributeEditor
     33 {
     34     private LocalVariableTypeTableAttribute targetLocalVariableTypeTableAttribute;
     35 
     36 
     37     /**
     38      * Creates a new LocalVariableTypeTableAttributeEditor that will edit line numbers
     39      * in the given line number table attribute.
     40      */
     41     public LocalVariableTypeTableAttributeEditor(LocalVariableTypeTableAttribute targetLocalVariableTypeTableAttribute)
     42     {
     43         this.targetLocalVariableTypeTableAttribute = targetLocalVariableTypeTableAttribute;
     44     }
     45 
     46 
     47     /**
     48      * Adds a given line number to the line number table attribute.
     49      */
     50     public void addLocalVariableTypeInfo(LocalVariableTypeInfo localVariableTypeInfo)
     51     {
     52         int                     localVariableTypeTableLength = targetLocalVariableTypeTableAttribute.u2localVariableTypeTableLength;
     53         LocalVariableTypeInfo[] localVariableTypeTable       = targetLocalVariableTypeTableAttribute.localVariableTypeTable;
     54 
     55         // Make sure there is enough space for the new localVariableTypeInfo.
     56         if (localVariableTypeTable.length <= localVariableTypeTableLength)
     57         {
     58             targetLocalVariableTypeTableAttribute.localVariableTypeTable = new LocalVariableTypeInfo[localVariableTypeTableLength+1];
     59             System.arraycopy(localVariableTypeTable, 0,
     60                              targetLocalVariableTypeTableAttribute.localVariableTypeTable, 0,
     61                              localVariableTypeTableLength);
     62             localVariableTypeTable = targetLocalVariableTypeTableAttribute.localVariableTypeTable;
     63         }
     64 
     65         // Add the localVariableTypeInfo.
     66         localVariableTypeTable[targetLocalVariableTypeTableAttribute.u2localVariableTypeTableLength++] = localVariableTypeInfo;
     67     }
     68 }