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