1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 52270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option) 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version. 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details. 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc., 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.classfile; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.attribute.visitor.AttributeVisitor; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.constant.visitor.ConstantVisitor; 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.visitor.*; 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This interface provides access to the representation of a Java class. 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic interface Clazz extends VisitorAccepter 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the access flags of this class. 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @see ClassConstants 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public int getAccessFlags(); 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the full internal name of this class. 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getName(); 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the full internal name of the super class of this class, or 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * null if this class represents java.lang.Object. 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getSuperName(); 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the number of interfaces that this class implements. 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public int getInterfaceCount(); 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the full internal name of the interface at the given index of 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * this class. 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getInterfaceName(int index); 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the tag value of the Constant at the specified index. 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public int getTag(int constantIndex); 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the String value of the Utf8Constant at the specified index. 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getString(int constantIndex); 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the String value of the StringConstant at the specified index. 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getStringString(int constantIndex); 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the class name of ClassConstant at the specified index. 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getClassName(int constantIndex); 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the name of the NameAndTypeConstant at the specified index. 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getName(int constantIndex); 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the type of the NameAndTypeConstant at the specified index. 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getType(int constantIndex); 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 93b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 942270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Returns the class name of the RefConstant at the specified index. 952270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 962270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public String getRefClassName(int constantIndex); 972270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 982270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 99b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Returns the name of the RefConstant at the specified index. 100b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 101b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public String getRefName(int constantIndex); 102b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 103b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 104b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Returns the type of the RefConstant at the specified index. 105b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 106b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public String getRefType(int constantIndex); 107b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Methods pertaining to related classes. 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Notifies this Clazz that it is being subclassed by another class. 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addSubClass(Clazz clazz); 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the super class of this class. 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public Clazz getSuperClass(); 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the interface at the given index. 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public Clazz getInterface(int index); 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns whether this class extends the given class. 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * A class is always considered to extend itself. 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Interfaces are considered to only extend the root Object class. 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public boolean extends_(Clazz clazz); 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 134b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Returns whether this class extends the specified class. 135b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * A class is always considered to extend itself. 136b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Interfaces are considered to only extend the root Object class. 137b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 138b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public boolean extends_(String className); 139b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 140b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns whether this class implements the given class. 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * A class is always considered to implement itself. 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Interfaces are considered to implement all their superinterfaces. 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public boolean extendsOrImplements(Clazz clazz); 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 147b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 148b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Returns whether this class implements the specified class. 149b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * A class is always considered to implement itself. 150b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Interfaces are considered to implement all their superinterfaces. 151b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 152b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public boolean extendsOrImplements(String className); 153b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Methods for getting specific class members. 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the field with the given name and descriptor. 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato Field findField(String name, String descriptor); 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the method with the given name and descriptor. 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato Method findMethod(String name, String descriptor); 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Methods for accepting various types of visitors. 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Accepts the given class visitor. 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void accept(ClassVisitor classVisitor); 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Accepts the given class visitor in the class hierarchy. 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param visitThisClass specifies whether to visit this class. 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param visitSuperClass specifies whether to visit the super classes. 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param visitInterfaces specifies whether to visit the interfaces. 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param visitSubclasses specifies whether to visit the subclasses. 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param classVisitor the <code>ClassVisitor</code> that will 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * visit the class hierarchy. 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void hierarchyAccept(boolean visitThisClass, 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean visitSuperClass, 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean visitInterfaces, 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean visitSubclasses, 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ClassVisitor classVisitor); 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given class visitor visit all known subclasses. 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param classVisitor the <code>ClassVisitor</code> that will visit the 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * subclasses. 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void subclassesAccept(ClassVisitor classVisitor); 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given constant pool entry visitor visit all constant pool entries 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of this class. 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void constantPoolEntriesAccept(ConstantVisitor constantVisitor); 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given constant pool entry visitor visit the constant pool entry 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * at the specified index. 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void constantPoolEntryAccept(int index, ConstantVisitor constantVisitor); 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given constant pool entry visitor visit the class constant pool 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * entry of this class. 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void thisClassConstantAccept(ConstantVisitor constantVisitor); 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given constant pool entry visitor visit the class constant pool 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * entry of the super class of this class, if there is one. 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void superClassConstantAccept(ConstantVisitor constantVisitor); 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given constant pool entry visitor visit the class constant pool 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * entries for all interfaces of this class. 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void interfaceConstantsAccept(ConstantVisitor constantVisitor); 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given member info visitor visit all fields of this class. 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void fieldsAccept(MemberVisitor memberVisitor); 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given member info visitor visit the specified field. 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void fieldAccept(String name, String descriptor, MemberVisitor memberVisitor); 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given member info visitor visit all methods of this class. 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void methodsAccept(MemberVisitor memberVisitor); 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given member info visitor visit the specified method. 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void methodAccept(String name, String descriptor, MemberVisitor memberVisitor); 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns whether the given method may possibly have implementing or 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * overriding methods down the class hierarchy. This can only be true 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * if the class is not final, and the method is not private, static, or 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * final, or a constructor. 252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param method the method that may have implementations. 253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @return whether it may have implementations. 254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public boolean mayHaveImplementations(Method method); 256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Lets the given attribute info visitor visit all attributes of this class. 259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void attributesAccept(AttributeVisitor attributeVisitor); 261b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 262b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 263b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Lets the given attribute info visitor visit the specified attribute. 264b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 265b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public void attributeAccept(String name, AttributeVisitor attributeVisitor); 266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 267