1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Copyright (c) 2002-2013 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.attribute.visitor; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.*; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.attribute.*; 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.attribute.annotation.*; 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.attribute.preverification.*; 27b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangimport proguard.util.*; 28b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 29b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangimport java.util.List; 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This AttributeVisitor delegates its visits another AttributeVisitor, but 33b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * only when the visited attribute has a name that that matches a given regular 34b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * expression. 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic class AttributeNameFilter 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimplements AttributeVisitor 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 41b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang private final StringMatcher regularExpressionMatcher; 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final AttributeVisitor attributeVisitor; 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 469f606f95f03a75961498803e24bee6799a7c0885Ying Wang * Creates a new AttributeNameFilter. 47b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param regularExpression the regular expression against which attribute 48b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * names will be matched. 49b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param attributeVisitor the <code>AttributeVisitor</code> to which 50b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * visits will be delegated. 51b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 52b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public AttributeNameFilter(String regularExpression, 53b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang AttributeVisitor attributeVisitor) 54b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang { 55b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang this(new ListParser(new NameParser()).parse(regularExpression), 56b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang attributeVisitor); 57b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang } 58b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 59b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 60b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 61b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Creates a new AttributeNameFilter. 62b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param regularExpression the regular expression against which attribute 63b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * names will be matched. 64b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param attributeVisitor the <code>AttributeVisitor</code> to which 65b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * visits will be delegated. 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 67b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public AttributeNameFilter(List regularExpression, 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato AttributeVisitor attributeVisitor) 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 70b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang this(new ListParser(new NameParser()).parse(regularExpression), 71b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang attributeVisitor); 72b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang } 73b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 74b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 75b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang /** 76b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Creates a new AttributeNameFilter. 77b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param regularExpressionMatcher the string matcher against which 78b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * attribute names will be matched. 79b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * @param attributeVisitor the <code>AttributeVisitor</code> to 80b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * which visits will be delegated. 81b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */ 82b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public AttributeNameFilter(StringMatcher regularExpressionMatcher, 83b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang AttributeVisitor attributeVisitor) 84b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang { 85b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang this.regularExpressionMatcher = regularExpressionMatcher; 86b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang this.attributeVisitor = attributeVisitor; 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for AttributeVisitor. 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, unknownAttribute)) 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato unknownAttribute.accept(clazz, attributeVisitor); 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 101b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) 102b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang { 103b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang if (accepted(clazz, bootstrapMethodsAttribute)) 104b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang { 105b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang bootstrapMethodsAttribute.accept(clazz, attributeVisitor); 106b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang } 107b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang } 108b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 109b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute) 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, sourceFileAttribute)) 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato sourceFileAttribute.accept(clazz, attributeVisitor); 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute) 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, sourceDirAttribute)) 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato sourceDirAttribute.accept(clazz, attributeVisitor); 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, innerClassesAttribute)) 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato innerClassesAttribute.accept(clazz, attributeVisitor); 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute) 138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, enclosingMethodAttribute)) 140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato enclosingMethodAttribute.accept(clazz, attributeVisitor); 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute) 147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, deprecatedAttribute)) 149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato deprecatedAttribute.accept(clazz, attributeVisitor); 151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute) 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, deprecatedAttribute)) 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato deprecatedAttribute.accept(clazz, field, attributeVisitor); 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute) 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, deprecatedAttribute)) 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato deprecatedAttribute.accept(clazz, method, attributeVisitor); 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute) 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, syntheticAttribute)) 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato syntheticAttribute.accept(clazz, attributeVisitor); 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute) 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, syntheticAttribute)) 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato syntheticAttribute.accept(clazz, field, attributeVisitor); 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute) 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, syntheticAttribute)) 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato syntheticAttribute.accept(clazz, method, attributeVisitor); 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute) 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, signatureAttribute)) 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato signatureAttribute.accept(clazz, attributeVisitor); 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute signatureAttribute) 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, signatureAttribute)) 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato signatureAttribute.accept(clazz, field, attributeVisitor); 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute signatureAttribute) 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, signatureAttribute)) 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato signatureAttribute.accept(clazz, method, attributeVisitor); 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, constantValueAttribute)) 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constantValueAttribute.accept(clazz, field, attributeVisitor); 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute) 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, exceptionsAttribute)) 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato exceptionsAttribute.accept(clazz, method, attributeVisitor); 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, codeAttribute)) 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato codeAttribute.accept(clazz, method, attributeVisitor); 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute) 255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, stackMapAttribute)) 257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato stackMapAttribute.accept(clazz, method, codeAttribute, attributeVisitor); 259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute) 264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, stackMapTableAttribute)) 266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato stackMapTableAttribute.accept(clazz, method, codeAttribute, attributeVisitor); 268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute) 273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, lineNumberTableAttribute)) 275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato lineNumberTableAttribute.accept(clazz, method, codeAttribute, attributeVisitor); 277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute) 282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, localVariableTableAttribute)) 284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato localVariableTableAttribute.accept(clazz, method, codeAttribute, attributeVisitor); 286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute) 291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, localVariableTypeTableAttribute)) 293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato localVariableTypeTableAttribute.accept(clazz, method, codeAttribute, attributeVisitor); 295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) 300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) 302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeVisibleAnnotationsAttribute.accept(clazz, attributeVisitor); 304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 305b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 306b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 307b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 308b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) 309b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 310b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) 311b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 312b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeVisibleAnnotationsAttribute.accept(clazz, field, attributeVisitor); 313b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 314b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 315b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 316b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 317b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) 318b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 319b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) 320b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 321b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeVisibleAnnotationsAttribute.accept(clazz, method, attributeVisitor); 322b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 323b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 324b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 325b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 326b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) 327b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 328b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) 329b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 330b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeInvisibleAnnotationsAttribute.accept(clazz, attributeVisitor); 331b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 332b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 333b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 334b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 335b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) 336b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 337b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) 338b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 339b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeInvisibleAnnotationsAttribute.accept(clazz, field, attributeVisitor); 340b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 341b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 342b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 343b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 344b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) 345b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 346b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) 347b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 348b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeInvisibleAnnotationsAttribute.accept(clazz, method, attributeVisitor); 349b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 350b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 351b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 352b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 353b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute) 354b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 355b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeVisibleParameterAnnotationsAttribute)) 356b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 357b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeVisibleParameterAnnotationsAttribute.accept(clazz, method, attributeVisitor); 358b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 359b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 360b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 361b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 362b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute) 363b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 364b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, runtimeInvisibleParameterAnnotationsAttribute)) 365b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 366b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato runtimeInvisibleParameterAnnotationsAttribute.accept(clazz, method, attributeVisitor); 367b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 368b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 369b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 370b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 371b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute) 372b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 373b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (accepted(clazz, annotationDefaultAttribute)) 374b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 375b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato annotationDefaultAttribute.accept(clazz, method, attributeVisitor); 376b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 377b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 378b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 379b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 380b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Small utility methods. 381b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 382b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private boolean accepted(Clazz clazz, Attribute attribute) 383b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 384b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang return regularExpressionMatcher.matches(attribute.getAttributeName(clazz)); 385b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 386b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 387