12270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/*
22270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ProGuard -- shrinking, optimization, obfuscation, and preverification
32270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *             of Java bytecode.
42270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
52270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
62270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
72270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is free software; you can redistribute it and/or modify it
82270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * under the terms of the GNU General Public License as published by the Free
92270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Software Foundation; either version 2 of the License, or (at your option)
102270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * any later version.
112270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
122270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is distributed in the hope that it will be useful, but WITHOUT
132270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
142270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
152270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * more details.
162270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
172270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * You should have received a copy of the GNU General Public License along
182270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * with this program; if not, write to the Free Software Foundation, Inc.,
192270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
202270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */
212270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompackage proguard.classfile.attribute;
222270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
232270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.*;
242270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.visitor.*;
252270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
262270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/**
272270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This Attribute represents a method parameters attribute.
282270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom *
292270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * @author Eric Lafortune
302270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */
312270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompublic class MethodParametersAttribute extends Attribute
322270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom{
332270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public int             u1parametersCount;
342270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public ParameterInfo[] parameters;
352270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
362270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
372270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
382270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Creates an uninitialized MethodParametersAttribute.
392270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
402270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public MethodParametersAttribute()
412270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
422270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
432270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
442270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
452270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
462270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Creates an initialized MethodParametersAttribute.
472270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
482270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public MethodParametersAttribute(int             u2attributeNameIndex,
492270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom                                     int             u1parametersCount,
502270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom                                     ParameterInfo[] parameters)
512270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
522270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        super(u2attributeNameIndex);
532270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
542270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        this.u1parametersCount = u1parametersCount;
552270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        this.parameters        = parameters;
562270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
572270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
582270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
592270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    // Implementations for Attribute.
602270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
612270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void accept(Clazz clazz, Method method, AttributeVisitor attributeVisitor)
622270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
632270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        attributeVisitor.visitMethodParametersAttribute(clazz, method, this);
642270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
652270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
662270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom
672270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    /**
682270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     * Applies the given visitor to all parameters.
692270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom     */
702270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    public void parametersAccept(Clazz clazz, Method method, ParameterInfoVisitor parameterInfoVisitor)
712270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    {
722270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        // Loop over all parameters.
732270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        for (int index = 0; index < u1parametersCount; index++)
742270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        {
752270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom            // We don't need double dispatching here, since there is only one
762270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom            // type of ParameterInfo.
772270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom            parameterInfoVisitor.visitParameterInfo(clazz, method, index, parameters[index]);
782270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        }
792270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom    }
802270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom}
81