BootstrapMethodInfo.java revision cfead78069f3dc32998dc118ee08cab3867acea2
136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/* 236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * ProGuard -- shrinking, optimization, obfuscation, and preverification 336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * of Java bytecode. 436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu) 636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * This program is free software; you can redistribute it and/or modify it 836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * under the terms of the GNU General Public License as published by the Free 936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Software Foundation; either version 2 of the License, or (at your option) 1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * any later version. 1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * This program is distributed in the hope that it will be useful, but WITHOUT 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * more details. 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * You should have received a copy of the GNU General Public License along 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * with this program; if not, write to the Free Software Foundation, Inc., 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespackage proguard.classfile.attribute; 22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesimport proguard.classfile.*; 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesimport proguard.classfile.constant.visitor.ConstantVisitor; 25ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/** 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Representation of a bootstrap method. 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * @author Eric Lafortune 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespublic class BootstrapMethodInfo implements VisitorAccepter 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines{ 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public int u2methodHandleIndex; 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public int u2methodArgumentCount; 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public int[] u2methodArguments; 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /** 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * An extra field in which visitors can store information. 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public Object visitorInfo; 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /** 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Creates an uninitialized BootstrapMethodInfo. 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public BootstrapMethodInfo() 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /** 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Creates an initialized BootstrapMethodInfo. 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public BootstrapMethodInfo(int u2methodHandleIndex, 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines int u2methodArgumentCount, 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines int[] u2methodArguments) 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 5837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines this.u2methodHandleIndex = u2methodHandleIndex; 5937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines this.u2methodArgumentCount = u2methodArgumentCount; 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines this.u2methodArguments = u2methodArguments; 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /** 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * Applies the given constant pool visitor to the argument constants of the 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * bootstrap method. 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines */ 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public void methodArgumentsAccept(Clazz clazz, ConstantVisitor constantVisitor) 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines for (int index = 0; index < u2methodArgumentCount; index++) 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines clazz.constantPoolEntryAccept(u2methodArguments[index], 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines constantVisitor); 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 77dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Implementations for VisitorAccepter. 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public Object getVisitorInfo() 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return visitorInfo; 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public void setVisitorInfo(Object visitorInfo) 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines { 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines this.visitorInfo = visitorInfo; 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines