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