1 /* 2 * ProGuard -- shrinking, optimization, obfuscation, and preverification 3 * of Java bytecode. 4 * 5 * Copyright (c) 2002-2014 Eric Lafortune (eric@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; 22 23 import proguard.classfile.attribute.Attribute; 24 import proguard.classfile.attribute.visitor.AttributeVisitor; 25 import proguard.classfile.visitor.*; 26 27 /** 28 * Representation of a method from a program class. 29 * 30 * @author Eric Lafortune 31 */ 32 public class ProgramMethod extends ProgramMember implements Method 33 { 34 /** 35 * An extra field pointing to the Clazz objects referenced in the 36 * descriptor string. This field is filled out by the <code>{@link 37 * proguard.classfile.util.ClassReferenceInitializer ClassReferenceInitializer}</code>. 38 * References to primitive types are ignored. 39 */ 40 public Clazz[] referencedClasses; 41 42 43 /** 44 * Creates an uninitialized ProgramMethod. 45 */ ProgramMethod()46 public ProgramMethod() 47 { 48 } 49 50 51 /** 52 * Creates an initialized ProgramMethod. 53 */ ProgramMethod(int u2accessFlags, int u2nameIndex, int u2descriptorIndex, int u2attributesCount, Attribute[] attributes, Clazz[] referencedClasses)54 public ProgramMethod(int u2accessFlags, 55 int u2nameIndex, 56 int u2descriptorIndex, 57 int u2attributesCount, 58 Attribute[] attributes, 59 Clazz[] referencedClasses) 60 { 61 super(u2accessFlags, u2nameIndex, u2descriptorIndex, u2attributesCount, attributes); 62 63 this.referencedClasses = referencedClasses; 64 } 65 66 67 // Implementations for ProgramMember. 68 accept(ProgramClass programClass, MemberVisitor memberVisitor)69 public void accept(ProgramClass programClass, MemberVisitor memberVisitor) 70 { 71 memberVisitor.visitProgramMethod(programClass, this); 72 } 73 74 attributesAccept(ProgramClass programClass, AttributeVisitor attributeVisitor)75 public void attributesAccept(ProgramClass programClass, AttributeVisitor attributeVisitor) 76 { 77 for (int index = 0; index < u2attributesCount; index++) 78 { 79 attributes[index].accept(programClass, this, attributeVisitor); 80 } 81 } 82 83 84 // Implementations for Member. 85 referencedClassesAccept(ClassVisitor classVisitor)86 public void referencedClassesAccept(ClassVisitor classVisitor) 87 { 88 if (referencedClasses != null) 89 { 90 for (int index = 0; index < referencedClasses.length; index++) 91 { 92 if (referencedClasses[index] != null) 93 { 94 referencedClasses[index].accept(classVisitor); 95 } 96 } 97 } 98 } 99 } 100