diff options
Diffstat (limited to 'src/proguard/classfile/attribute/visitor')
18 files changed, 0 insertions, 2757 deletions
diff --git a/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java b/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java deleted file mode 100644 index 701451e..0000000 --- a/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.util.SimplifiedVisitor; -import proguard.classfile.visitor.*; - -/** - * This ClassVisitor, MemberVisitor, and AttributeVisitor lets a given - * AttributeVisitor visit all Attribute objects of the program classes, - * program class members, or code attributes, respectively, that it visits. - * - * @author Eric Lafortune - */ -public class AllAttributeVisitor -extends SimplifiedVisitor -implements ClassVisitor, - MemberVisitor, - AttributeVisitor -{ - private final boolean deep; - private final AttributeVisitor attributeVisitor; - - - /** - * Creates a new shallow AllAttributeVisitor. - * @param attributeVisitor the AttributeVisitor to which visits will be - * delegated. - */ - public AllAttributeVisitor(AttributeVisitor attributeVisitor) - { - this(false, attributeVisitor); - } - - - /** - * Creates a new optionally deep AllAttributeVisitor. - * @param deep specifies whether the attributes contained - * further down the class structure should be - * visited too. - * @param attributeVisitor the AttributeVisitor to which visits will be - * delegated. - */ - public AllAttributeVisitor(boolean deep, - AttributeVisitor attributeVisitor) - { - this.deep = deep; - this.attributeVisitor = attributeVisitor; - } - - - // Implementations for ClassVisitor. - - public void visitProgramClass(ProgramClass programClass) - { - programClass.attributesAccept(attributeVisitor); - - // Visit the attributes further down the class structure, if required. - if (deep) - { - programClass.fieldsAccept(this); - programClass.methodsAccept(this); - programClass.attributesAccept(this); - } - } - - - public void visitLibraryClass(LibraryClass libraryClass) {} - - - // Implementations for MemberVisitor. - - public void visitProgramMember(ProgramClass programClass, ProgramMember programMember) - { - programMember.attributesAccept(programClass, attributeVisitor); - - // Visit the attributes further down the member structure, if required. - if (deep) - { - programMember.attributesAccept(programClass, this); - } - } - - - public void visitLibraryMember(LibraryClass programClass, LibraryMember programMember) {} - - - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - codeAttribute.attributesAccept(clazz, method, attributeVisitor); - } -} diff --git a/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java b/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java deleted file mode 100644 index 6110325..0000000 --- a/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.Clazz; -import proguard.classfile.attribute.*; -import proguard.classfile.util.SimplifiedVisitor; - -/** - * This AttributeVisitor lets a given BootstrapMethodInfoVisitor visit all - * bootstrap method objects of the BootstrapMethodsAttribute objects it visits. - * - * @author Eric Lafortune - */ -public class AllBootstrapMethodInfoVisitor -extends SimplifiedVisitor -implements AttributeVisitor -{ - private final BootstrapMethodInfoVisitor bootstrapMethodInfoVisitor; - - - public AllBootstrapMethodInfoVisitor(BootstrapMethodInfoVisitor bootstrapMethodInfoVisitor) - { - this.bootstrapMethodInfoVisitor = bootstrapMethodInfoVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) - { - bootstrapMethodsAttribute.bootstrapMethodEntriesAccept(clazz, bootstrapMethodInfoVisitor); - } -} diff --git a/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java b/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java deleted file mode 100644 index 9b6c9de..0000000 --- a/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.util.SimplifiedVisitor; - -/** - * This AttributeVisitor lets a given ExceptionInfoVisitor visit all exceptions - * objects of the CodeAttribute objects it visits. - * - * @author Eric Lafortune - */ -public class AllExceptionInfoVisitor -extends SimplifiedVisitor -implements AttributeVisitor -{ - private final ExceptionInfoVisitor exceptionInfoVisitor; - - - public AllExceptionInfoVisitor(ExceptionInfoVisitor exceptionInfoVisitor) - { - this.exceptionInfoVisitor = exceptionInfoVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - codeAttribute.exceptionsAccept(clazz, method, exceptionInfoVisitor); - } -} diff --git a/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java b/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java deleted file mode 100644 index b1005c8..0000000 --- a/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.Clazz; -import proguard.classfile.attribute.*; -import proguard.classfile.util.SimplifiedVisitor; - -/** - * This AttributeVisitor lets a given InnerClassesInfoVisitor visit all - * InnerClassessInfo objects of the InnerClassesAttribute objects it visits. - * - * @author Eric Lafortune - */ -public class AllInnerClassesInfoVisitor -extends SimplifiedVisitor -implements AttributeVisitor -{ - private final InnerClassesInfoVisitor innerClassesInfoVisitor; - - - public AllInnerClassesInfoVisitor(InnerClassesInfoVisitor innerClassesInfoVisitor) - { - this.innerClassesInfoVisitor = innerClassesInfoVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) - { - innerClassesAttribute.innerClassEntriesAccept(clazz, innerClassesInfoVisitor); - } -}
\ No newline at end of file diff --git a/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java b/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java deleted file mode 100644 index 14c1edc..0000000 --- a/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java +++ /dev/null @@ -1,467 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.attribute.annotation.*; -import proguard.classfile.attribute.preverification.*; -import proguard.util.*; - -import java.util.List; - -/** - * This AttributeVisitor delegates its visits another AttributeVisitor, but - * only when the visited attribute has a name that that matches a given regular - * expression. - * - * @author Eric Lafortune - */ -public class AttributeNameFilter -implements AttributeVisitor -{ - private final StringMatcher regularExpressionMatcher; - private final AttributeVisitor attributeVisitor; - - - /** - * Creates a new AttributeNameFilter. - * @param regularExpression the regular expression against which attribute - * names will be matched. - * @param attributeVisitor the <code>AttributeVisitor</code> to which - * visits will be delegated. - */ - public AttributeNameFilter(String regularExpression, - AttributeVisitor attributeVisitor) - { - this(new ListParser(new NameParser()).parse(regularExpression), - attributeVisitor); - } - - - /** - * Creates a new AttributeNameFilter. - * @param regularExpression the regular expression against which attribute - * names will be matched. - * @param attributeVisitor the <code>AttributeVisitor</code> to which - * visits will be delegated. - */ - public AttributeNameFilter(List regularExpression, - AttributeVisitor attributeVisitor) - { - this(new ListParser(new NameParser()).parse(regularExpression), - attributeVisitor); - } - - - /** - * Creates a new AttributeNameFilter. - * @param regularExpressionMatcher the string matcher against which - * attribute names will be matched. - * @param attributeVisitor the <code>AttributeVisitor</code> to - * which visits will be delegated. - */ - public AttributeNameFilter(StringMatcher regularExpressionMatcher, - AttributeVisitor attributeVisitor) - { - this.regularExpressionMatcher = regularExpressionMatcher; - this.attributeVisitor = attributeVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) - { - if (accepted(clazz, unknownAttribute)) - { - attributeVisitor.visitUnknownAttribute(clazz, unknownAttribute); - } - } - - - public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) - { - if (accepted(clazz, bootstrapMethodsAttribute)) - { - attributeVisitor.visitBootstrapMethodsAttribute(clazz, bootstrapMethodsAttribute); - } - } - - - public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute) - { - if (accepted(clazz, sourceFileAttribute)) - { - attributeVisitor.visitSourceFileAttribute(clazz, sourceFileAttribute); - } - } - - - public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute) - { - if (accepted(clazz, sourceDirAttribute)) - { - attributeVisitor.visitSourceDirAttribute(clazz, sourceDirAttribute); - } - } - - - public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) - { - if (accepted(clazz, innerClassesAttribute)) - { - attributeVisitor.visitInnerClassesAttribute(clazz, innerClassesAttribute); - } - } - - - public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute) - { - if (accepted(clazz, enclosingMethodAttribute)) - { - attributeVisitor.visitEnclosingMethodAttribute(clazz, enclosingMethodAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute) - { - if (accepted(clazz, deprecatedAttribute)) - { - attributeVisitor.visitDeprecatedAttribute(clazz, deprecatedAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute) - { - if (accepted(clazz, deprecatedAttribute)) - { - attributeVisitor.visitDeprecatedAttribute(clazz, field, deprecatedAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute) - { - if (accepted(clazz, deprecatedAttribute)) - { - attributeVisitor.visitDeprecatedAttribute(clazz, method, deprecatedAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute) - { - if (accepted(clazz, syntheticAttribute)) - { - attributeVisitor.visitSyntheticAttribute(clazz, syntheticAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute) - { - if (accepted(clazz, syntheticAttribute)) - { - attributeVisitor.visitSyntheticAttribute(clazz, field, syntheticAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute) - { - if (accepted(clazz, syntheticAttribute)) - { - attributeVisitor.visitSyntheticAttribute(clazz, method, syntheticAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute) - { - if (accepted(clazz, signatureAttribute)) - { - attributeVisitor.visitSignatureAttribute(clazz, signatureAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute signatureAttribute) - { - if (accepted(clazz, signatureAttribute)) - { - attributeVisitor.visitSignatureAttribute(clazz, field, signatureAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute signatureAttribute) - { - if (accepted(clazz, signatureAttribute)) - { - attributeVisitor.visitSignatureAttribute(clazz, method, signatureAttribute); - } - } - - - public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) - { - if (accepted(clazz, constantValueAttribute)) - { - attributeVisitor.visitConstantValueAttribute(clazz, field, constantValueAttribute); - } - } - - - public void visitMethodParametersAttribute(Clazz clazz, Method method, MethodParametersAttribute exceptionsAttribute) - { - if (accepted(clazz, exceptionsAttribute)) - { - attributeVisitor.visitMethodParametersAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute) - { - if (accepted(clazz, exceptionsAttribute)) - { - attributeVisitor.visitExceptionsAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - if (accepted(clazz, codeAttribute)) - { - attributeVisitor.visitCodeAttribute(clazz, method, codeAttribute); - } - } - - - public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute) - { - if (accepted(clazz, stackMapAttribute)) - { - attributeVisitor.visitStackMapAttribute(clazz, method, codeAttribute, stackMapAttribute); - } - } - - - public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute) - { - if (accepted(clazz, stackMapTableAttribute)) - { - attributeVisitor.visitStackMapTableAttribute(clazz, method, codeAttribute, stackMapTableAttribute); - } - } - - - public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute) - { - if (accepted(clazz, lineNumberTableAttribute)) - { - attributeVisitor.visitLineNumberTableAttribute(clazz, method, codeAttribute, lineNumberTableAttribute); - } - } - - - public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute) - { - if (accepted(clazz, localVariableTableAttribute)) - { - attributeVisitor.visitLocalVariableTableAttribute(clazz, method, codeAttribute, localVariableTableAttribute); - } - } - - - public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute) - { - if (accepted(clazz, localVariableTypeTableAttribute)) - { - attributeVisitor.visitLocalVariableTypeTableAttribute(clazz, method, codeAttribute, localVariableTypeTableAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, field, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, method, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, field, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, method, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleParameterAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleParameterAnnotationsAttribute(clazz, method, runtimeVisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleParameterAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleParameterAnnotationsAttribute(clazz, method, runtimeInvisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, field, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeVisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, field, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (accepted(clazz, runtimeInvisibleTypeAnnotationsAttribute)) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute) - { - if (accepted(clazz, annotationDefaultAttribute)) - { - attributeVisitor.visitAnnotationDefaultAttribute(clazz, method, annotationDefaultAttribute); - } - } - - - // Small utility methods. - - private boolean accepted(Clazz clazz, Attribute attribute) - { - return regularExpressionMatcher.matches(attribute.getAttributeName(clazz)); - } -} diff --git a/src/proguard/classfile/attribute/visitor/AttributeVisitor.java b/src/proguard/classfile/attribute/visitor/AttributeVisitor.java deleted file mode 100644 index a9fc6b6..0000000 --- a/src/proguard/classfile/attribute/visitor/AttributeVisitor.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.attribute.annotation.*; -import proguard.classfile.attribute.preverification.*; - -/** - * This interface specifies the methods for a visitor of <code>Attribute</code> - * objects. - * - * @author Eric Lafortune - */ -public interface AttributeVisitor -{ - // Attributes that are attached to classes. - - public void visitUnknownAttribute( Clazz clazz, UnknownAttribute unknownAttribute); - public void visitBootstrapMethodsAttribute( Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute); - public void visitSourceFileAttribute( Clazz clazz, SourceFileAttribute sourceFileAttribute); - public void visitSourceDirAttribute( Clazz clazz, SourceDirAttribute sourceDirAttribute); - public void visitInnerClassesAttribute( Clazz clazz, InnerClassesAttribute innerClassesAttribute); - public void visitEnclosingMethodAttribute( Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute); - - // Attributes that are attached to classes, fields, and methods. - - public void visitDeprecatedAttribute( Clazz clazz, DeprecatedAttribute deprecatedAttribute); - public void visitDeprecatedAttribute( Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute); - public void visitDeprecatedAttribute( Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute); - - public void visitSyntheticAttribute( Clazz clazz, SyntheticAttribute syntheticAttribute); - public void visitSyntheticAttribute( Clazz clazz, Field field, SyntheticAttribute syntheticAttribute); - public void visitSyntheticAttribute( Clazz clazz, Method method, SyntheticAttribute syntheticAttribute); - - public void visitSignatureAttribute( Clazz clazz, SignatureAttribute signatureAttribute); - public void visitSignatureAttribute( Clazz clazz, Field field, SignatureAttribute signatureAttribute); - public void visitSignatureAttribute( Clazz clazz, Method method, SignatureAttribute signatureAttribute); - - // Attributes that are attached to fields. - - public void visitConstantValueAttribute( Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute); - - // Attributes that are attached to methods. - - public void visitMethodParametersAttribute( Clazz clazz, Method method, MethodParametersAttribute methodParametersAttribute); - public void visitExceptionsAttribute( Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute); - public void visitCodeAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute); - - // Attributes that are attached to code attributes. - - public void visitStackMapAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute); - public void visitStackMapTableAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute); - public void visitLineNumberTableAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute); - public void visitLocalVariableTableAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute); - public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute); - - // Annotation attributes. - - public void visitRuntimeVisibleAnnotationsAttribute( Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute); - public void visitRuntimeVisibleAnnotationsAttribute( Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute); - public void visitRuntimeVisibleAnnotationsAttribute( Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute); - - public void visitRuntimeInvisibleAnnotationsAttribute( Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute); - public void visitRuntimeInvisibleAnnotationsAttribute( Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute); - public void visitRuntimeInvisibleAnnotationsAttribute( Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute); - - public void visitRuntimeVisibleParameterAnnotationsAttribute( Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute); - public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute); - - public void visitRuntimeVisibleTypeAnnotationsAttribute( Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute); - public void visitRuntimeVisibleTypeAnnotationsAttribute( Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute); - public void visitRuntimeVisibleTypeAnnotationsAttribute( Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute); - public void visitRuntimeVisibleTypeAnnotationsAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute); - - public void visitRuntimeInvisibleTypeAnnotationsAttribute( Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute); - public void visitRuntimeInvisibleTypeAnnotationsAttribute( Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute); - public void visitRuntimeInvisibleTypeAnnotationsAttribute( Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute); - public void visitRuntimeInvisibleTypeAnnotationsAttribute( Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute); - - public void visitAnnotationDefaultAttribute( Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute); -} diff --git a/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java b/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java deleted file mode 100755 index fb2a9d6..0000000 --- a/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.Clazz; -import proguard.classfile.attribute.BootstrapMethodInfo; - - -/** - * This interface specifies the methods for a visitor of - * <code>BootstrapMethodInfo</code> objects. Note that there is only a single - * implementation of <code>BootstrapMethodInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface BootstrapMethodInfoVisitor -{ - public void visitBootstrapMethodInfo(Clazz clazz, BootstrapMethodInfo bootstrapMethodInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java b/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java deleted file mode 100644 index 953dc06..0000000 --- a/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; - -/** - * This interface specifies the methods for a visitor of - * <code>ExceptionInfo</code> objects. Note that there is only a single - * implementation of <code>ExceptionInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface ExceptionInfoVisitor -{ - public void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java b/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java deleted file mode 100644 index f9e1a03..0000000 --- a/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.Clazz; -import proguard.classfile.attribute.InnerClassesInfo; - - -/** - * This interface specifies the methods for a visitor of - * <code>InnerClassesInfo</code> objects. Note that there is only a single - * implementation of <code>InnerClassesInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface InnerClassesInfoVisitor -{ - public void visitInnerClassesInfo(Clazz clazz, InnerClassesInfo innerClassesInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java b/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java deleted file mode 100644 index 5a6400d..0000000 --- a/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; - - -/** - * This interface specifies the methods for a visitor of - * <code>LineNumberInfo</code> objects. Note that there is only a single - * implementation of <code>LineNumberInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface LineNumberInfoVisitor -{ - public void visitLineNumberInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberInfo lineNumberInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java b/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java deleted file mode 100644 index dd17bea..0000000 --- a/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; - - -/** - * This interface specifies the methods for a visitor of - * <code>LocalVariableInfo</code> objects. Note that there is only a single - * implementation of <code>LocalVariableInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface LocalVariableInfoVisitor -{ - public void visitLocalVariableInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableInfo localVariableInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java b/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java deleted file mode 100644 index c37e9d7..0000000 --- a/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; - - -/** - * This interface specifies the methods for a visitor of - * <code>LocalVariableTypeInfo</code> objects. Note that there is only a single - * implementation of <code>LocalVariableTypeInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface LocalVariableTypeInfoVisitor -{ - public void visitLocalVariableTypeInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeInfo localVariableTypeInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java b/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java deleted file mode 100644 index 968f852..0000000 --- a/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.attribute.annotation.*; -import proguard.classfile.attribute.preverification.*; - -/** - * This AttributeVisitor delegates all visits to each AttributeVisitor - * in a given list. - * - * @author Eric Lafortune - */ -public class MultiAttributeVisitor implements AttributeVisitor -{ - private AttributeVisitor[] attributeVisitors; - - - public MultiAttributeVisitor() - { - } - - - public MultiAttributeVisitor(AttributeVisitor[] attributeVisitors) - { - this.attributeVisitors = attributeVisitors; - } - - - public void addAttributeVisitor(AttributeVisitor attributeVisitor) - { - incrementArraySize(); - - attributeVisitors[attributeVisitors.length - 1] = attributeVisitor; - } - - - private void incrementArraySize() - { - if (attributeVisitors == null) - { - attributeVisitors = new AttributeVisitor[1]; - } - else - { - AttributeVisitor[] newAttributeVisitors = - new AttributeVisitor[attributeVisitors.length + 1]; - System.arraycopy(attributeVisitors, 0, - newAttributeVisitors, 0, - attributeVisitors.length); - attributeVisitors = newAttributeVisitors; - } - } - - - // Implementations for AttributeVisitor. - - - public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitUnknownAttribute(clazz, unknownAttribute); - } - } - - - public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitBootstrapMethodsAttribute(clazz, bootstrapMethodsAttribute); - } - } - - - public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSourceFileAttribute(clazz, sourceFileAttribute); - } - } - - - public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSourceDirAttribute(clazz, sourceDirAttribute); - } - } - - - public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitInnerClassesAttribute(clazz, innerClassesAttribute); - } - } - - - public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitEnclosingMethodAttribute(clazz, enclosingMethodAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitDeprecatedAttribute(clazz, deprecatedAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSyntheticAttribute(clazz, syntheticAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, SignatureAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSignatureAttribute(clazz, syntheticAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitDeprecatedAttribute(clazz, field, deprecatedAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSyntheticAttribute(clazz, field, syntheticAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSignatureAttribute(clazz, field, syntheticAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitDeprecatedAttribute(clazz, method, deprecatedAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSyntheticAttribute(clazz, method, syntheticAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute syntheticAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitSignatureAttribute(clazz, method, syntheticAttribute); - } - } - - - public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitConstantValueAttribute(clazz, field, constantValueAttribute); - } - } - - - public void visitMethodParametersAttribute(Clazz clazz, Method method, MethodParametersAttribute methodParametersAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitMethodParametersAttribute(clazz, method, methodParametersAttribute); - } - } - - - public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitExceptionsAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitCodeAttribute(clazz, method, codeAttribute); - } - } - - - public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitStackMapAttribute(clazz, method, codeAttribute, stackMapAttribute); - } - } - - - public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitStackMapTableAttribute(clazz, method, codeAttribute, stackMapTableAttribute); - } - } - - - public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitLineNumberTableAttribute(clazz, method, codeAttribute, lineNumberTableAttribute); - } - } - - - public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitLocalVariableTableAttribute(clazz, method, codeAttribute, localVariableTableAttribute); - } - } - - - public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitLocalVariableTypeTableAttribute(clazz, method, codeAttribute, localVariableTypeTableAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleAnnotationsAttribute(clazz, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleAnnotationsAttribute(clazz, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleAnnotationsAttribute(clazz, field, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleAnnotationsAttribute(clazz, field, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleAnnotationsAttribute(clazz, method, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleAnnotationsAttribute(clazz, method, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleParameterAnnotationsAttribute(clazz, method, runtimeVisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleParameterAnnotationsAttribute(clazz, method, runtimeInvisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleTypeAnnotationsAttribute(clazz, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleTypeAnnotationsAttribute(clazz, field, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, field, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute) - { - for (int index = 0; index < attributeVisitors.length; index++) - { - attributeVisitors[index].visitAnnotationDefaultAttribute(clazz, method, annotationDefaultAttribute); - } - } -} diff --git a/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java b/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java deleted file mode 100644 index 4a54f75..0000000 --- a/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java +++ /dev/null @@ -1,373 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.attribute.annotation.*; -import proguard.classfile.attribute.preverification.*; - -/** - * This AttributeVisitor delegates its visits another AttributeVisitor, but - * only when the visited attribute is not empty. For instance, a local variable - * table without variables is empty. - * - * @author Eric Lafortune - */ -public class NonEmptyAttributeFilter -implements AttributeVisitor -{ - private final AttributeVisitor attributeVisitor; - - - /** - * Creates a new NonEmptyAttributeFilter. - * @param attributeVisitor the <code>AttributeVisitor</code> to which - * visits will be delegated. - */ - public NonEmptyAttributeFilter(AttributeVisitor attributeVisitor) - { - this.attributeVisitor = attributeVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) - { - attributeVisitor.visitUnknownAttribute(clazz, unknownAttribute); - } - - - public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) - { - if (bootstrapMethodsAttribute.u2bootstrapMethodsCount > 0) - { - attributeVisitor.visitBootstrapMethodsAttribute(clazz, bootstrapMethodsAttribute); - } - } - - - public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute) - { - attributeVisitor.visitSourceFileAttribute(clazz, sourceFileAttribute); - } - - - public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute) - { - attributeVisitor.visitSourceDirAttribute(clazz, sourceDirAttribute); - } - - - public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) - { - if (innerClassesAttribute.u2classesCount > 0) - { - attributeVisitor.visitInnerClassesAttribute(clazz, innerClassesAttribute); - } - } - - - public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute) - { - attributeVisitor.visitEnclosingMethodAttribute(clazz, enclosingMethodAttribute); - } - - - public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute) - { - attributeVisitor.visitDeprecatedAttribute(clazz, deprecatedAttribute); - } - - - public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute) - { - attributeVisitor.visitDeprecatedAttribute(clazz, field, deprecatedAttribute); - } - - - public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute) - { - attributeVisitor.visitDeprecatedAttribute(clazz, method, deprecatedAttribute); - } - - - public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute) - { - attributeVisitor.visitSyntheticAttribute(clazz, syntheticAttribute); - } - - - public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute) - { - attributeVisitor.visitSyntheticAttribute(clazz, field, syntheticAttribute); - } - - - public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute) - { - attributeVisitor.visitSyntheticAttribute(clazz, method, syntheticAttribute); - } - - - public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute) - { - attributeVisitor.visitSignatureAttribute(clazz, signatureAttribute); - } - - - public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute signatureAttribute) - { - attributeVisitor.visitSignatureAttribute(clazz, field, signatureAttribute); - } - - - public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute signatureAttribute) - { - attributeVisitor.visitSignatureAttribute(clazz, method, signatureAttribute); - } - - - public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) - { - attributeVisitor.visitConstantValueAttribute(clazz, field, constantValueAttribute); - } - - - public void visitMethodParametersAttribute(Clazz clazz, Method method, MethodParametersAttribute exceptionsAttribute) - { - if (exceptionsAttribute.u1parametersCount > 0) - { - attributeVisitor.visitMethodParametersAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute) - { - if (exceptionsAttribute.u2exceptionIndexTableLength > 0) - { - attributeVisitor.visitExceptionsAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - attributeVisitor.visitCodeAttribute(clazz, method, codeAttribute); - } - - - public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute) - { - if (stackMapAttribute.u2stackMapFramesCount > 0) - { - attributeVisitor.visitStackMapAttribute(clazz, method, codeAttribute, stackMapAttribute); - } - } - - - public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute) - { - if (stackMapTableAttribute.u2stackMapFramesCount > 0) - { - attributeVisitor.visitStackMapTableAttribute(clazz, method, codeAttribute, stackMapTableAttribute); - } - } - - - public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute) - { - if (lineNumberTableAttribute.u2lineNumberTableLength > 0) - { - attributeVisitor.visitLineNumberTableAttribute(clazz, method, codeAttribute, lineNumberTableAttribute); - } - } - - - public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute) - { - if (localVariableTableAttribute.u2localVariableTableLength > 0) - { - attributeVisitor.visitLocalVariableTableAttribute(clazz, method, codeAttribute, localVariableTableAttribute); - } - } - - - public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute) - { - if (localVariableTypeTableAttribute.u2localVariableTypeTableLength > 0) - { - attributeVisitor.visitLocalVariableTypeTableAttribute(clazz, method, codeAttribute, localVariableTypeTableAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, field, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, method, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, field, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, method, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute) - { - if (runtimeVisibleParameterAnnotationsAttribute.u1parametersCount > 0) - { - attributeVisitor.visitRuntimeVisibleParameterAnnotationsAttribute(clazz, method, runtimeVisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute) - { - if (runtimeInvisibleParameterAnnotationsAttribute.u1parametersCount > 0) - { - attributeVisitor.visitRuntimeInvisibleParameterAnnotationsAttribute(clazz, method, runtimeInvisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, field, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, field, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0) - { - attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute) - { - attributeVisitor.visitAnnotationDefaultAttribute(clazz, method, annotationDefaultAttribute); - } -} diff --git a/src/proguard/classfile/attribute/visitor/ParameterInfoVisitor.java b/src/proguard/classfile/attribute/visitor/ParameterInfoVisitor.java deleted file mode 100644 index 9f91c5b..0000000 --- a/src/proguard/classfile/attribute/visitor/ParameterInfoVisitor.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.ParameterInfo; - -/** - * This interface specifies the method for a visitor of - * <code>ParameterInfo</code> objects. Note that there is only a single - * implementation of <code>ParameterInfo</code>, such that this interface - * is not strictly necessary as a visitor. - * - * @author Eric Lafortune - */ -public interface ParameterInfoVisitor -{ - public void visitParameterInfo(Clazz clazz, Method method, int parameterIndex, ParameterInfo parameterInfo); -} diff --git a/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java b/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java deleted file mode 100644 index 176846d..0000000 --- a/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java +++ /dev/null @@ -1,443 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.attribute.annotation.*; -import proguard.classfile.attribute.preverification.*; -import proguard.obfuscate.AttributeShrinker; - -/** - * This AttributeVisitor delegates its visits to one of two other - * AttributeVisitor instances, depending on whether the visited attribute - * is strictly required or not. - * - * Stack map attributes and stack map table attributes are treated as optional. - * - * @see AttributeShrinker - * - * @author Eric Lafortune - */ -public class RequiredAttributeFilter -implements AttributeVisitor -{ - private final AttributeVisitor requiredAttributeVisitor; - private final AttributeVisitor optionalAttributeVisitor; - - - /** - * Creates a new RequiredAttributeFilter for visiting required attributes. - * @param requiredAttributeVisitor the visitor that will visit required - * attributes. - */ - public RequiredAttributeFilter(AttributeVisitor requiredAttributeVisitor) - { - this(requiredAttributeVisitor, null); - } - - - /** - * Creates a new RequiredAttributeFilter for visiting required and - * optional attributes. - * @param requiredAttributeVisitor the visitor that will visit required - * attributes. - * @param optionalAttributeVisitor the visitor that will visit optional - * attributes. - */ - public RequiredAttributeFilter(AttributeVisitor requiredAttributeVisitor, - AttributeVisitor optionalAttributeVisitor) - { - this.requiredAttributeVisitor = requiredAttributeVisitor; - this.optionalAttributeVisitor = optionalAttributeVisitor; - } - - - // Implementations for AttributeVisitor. - - public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitUnknownAttribute(clazz, unknownAttribute); - } - } - - - public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute) - { - if (requiredAttributeVisitor != null) - { - requiredAttributeVisitor.visitBootstrapMethodsAttribute(clazz, bootstrapMethodsAttribute); - } - } - - - public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSourceFileAttribute(clazz, sourceFileAttribute); - } - } - - - public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSourceDirAttribute(clazz, sourceDirAttribute); - } - } - - - public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitInnerClassesAttribute(clazz, innerClassesAttribute); - } - } - - - public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitEnclosingMethodAttribute(clazz, enclosingMethodAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitDeprecatedAttribute(clazz, deprecatedAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitDeprecatedAttribute(clazz, field, deprecatedAttribute); - } - } - - - public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitDeprecatedAttribute(clazz, method, deprecatedAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSyntheticAttribute(clazz, syntheticAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSyntheticAttribute(clazz, field, syntheticAttribute); - } - } - - - public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSyntheticAttribute(clazz, method, syntheticAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSignatureAttribute(clazz, signatureAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute signatureAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSignatureAttribute(clazz, field, signatureAttribute); - } - } - - - public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute signatureAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitSignatureAttribute(clazz, method, signatureAttribute); - } - } - - - public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) - { - if (requiredAttributeVisitor != null) - { - requiredAttributeVisitor.visitConstantValueAttribute(clazz, field, constantValueAttribute); - } - } - - - public void visitMethodParametersAttribute(Clazz clazz, Method method, MethodParametersAttribute exceptionsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitMethodParametersAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitExceptionsAttribute(clazz, method, exceptionsAttribute); - } - } - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - if (requiredAttributeVisitor != null) - { - requiredAttributeVisitor.visitCodeAttribute(clazz, method, codeAttribute); - } - } - - - public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitStackMapAttribute(clazz, method, codeAttribute, stackMapAttribute); - } - } - - - public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitStackMapTableAttribute(clazz, method, codeAttribute, stackMapTableAttribute); - } - } - - - public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitLineNumberTableAttribute(clazz, method, codeAttribute, lineNumberTableAttribute); - } - } - - - public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitLocalVariableTableAttribute(clazz, method, codeAttribute, localVariableTableAttribute); - } - } - - - public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitLocalVariableTypeTableAttribute(clazz, method, codeAttribute, localVariableTypeTableAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, field, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, method, runtimeVisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, field, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, method, runtimeInvisibleAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleParameterAnnotationsAttribute(clazz, method, runtimeVisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleParameterAnnotationsAttribute(clazz, method, runtimeInvisibleParameterAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, field, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeVisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, field, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeInvisibleTypeAnnotationsAttribute); - } - } - - - public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute) - { - if (optionalAttributeVisitor != null) - { - optionalAttributeVisitor.visitAnnotationDefaultAttribute(clazz, method, annotationDefaultAttribute); - } - } -} diff --git a/src/proguard/classfile/attribute/visitor/StackSizeComputer.java b/src/proguard/classfile/attribute/visitor/StackSizeComputer.java deleted file mode 100644 index d5cd99d..0000000 --- a/src/proguard/classfile/attribute/visitor/StackSizeComputer.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.classfile.attribute.visitor; - -import proguard.classfile.*; -import proguard.classfile.attribute.*; -import proguard.classfile.instruction.*; -import proguard.classfile.instruction.visitor.InstructionVisitor; -import proguard.classfile.util.SimplifiedVisitor; -import proguard.classfile.visitor.ClassPrinter; - -import java.util.Arrays; - -/** - * This AttributeVisitor computes the stack sizes at all instruction offsets - * of the code attributes that it visits. - * - * @author Eric Lafortune - */ -public class StackSizeComputer -extends SimplifiedVisitor -implements AttributeVisitor, - InstructionVisitor, - ExceptionInfoVisitor -{ - //* - private static final boolean DEBUG = false; - /*/ - private static boolean DEBUG = true; - //*/ - - - private boolean[] evaluated = new boolean[ClassConstants.TYPICAL_CODE_LENGTH]; - private int[] stackSizes = new int[ClassConstants.TYPICAL_CODE_LENGTH]; - - private boolean exitInstructionBlock; - - private int stackSize; - private int maxStackSize; - - - /** - * Returns whether the instruction at the given offset is reachable in the - * most recently visited code attribute. - */ - public boolean isReachable(int instructionOffset) - { - return evaluated[instructionOffset]; - } - - - /** - * Returns the stack size at the given instruction offset of the most - * recently visited code attribute. - */ - public int getStackSize(int instructionOffset) - { - if (!evaluated[instructionOffset]) - { - throw new IllegalArgumentException("Unknown stack size at unreachable instruction offset ["+instructionOffset+"]"); - } - - return stackSizes[instructionOffset]; - } - - - /** - * Returns the maximum stack size of the most recently visited code attribute. - */ - public int getMaxStackSize() - { - return maxStackSize; - } - - - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) - { -// DEBUG = -// clazz.getName().equals("abc/Def") && -// method.getName(clazz).equals("abc"); - - // TODO: Remove this when the code has stabilized. - // Catch any unexpected exceptions from the actual visiting method. - try - { - // Process the code. - visitCodeAttribute0(clazz, method, codeAttribute); - } - catch (RuntimeException ex) - { - System.err.println("Unexpected error while computing stack sizes:"); - System.err.println(" Class = ["+clazz.getName()+"]"); - System.err.println(" Method = ["+method.getName(clazz)+method.getDescriptor(clazz)+"]"); - System.err.println(" Exception = ["+ex.getClass().getName()+"] ("+ex.getMessage()+")"); - - if (DEBUG) - { - method.accept(clazz, new ClassPrinter()); - } - - throw ex; - } - } - - - public void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute) - { - if (DEBUG) - { - System.out.println("StackSizeComputer: "+clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz)); - } - - // Try to reuse the previous array. - int codeLength = codeAttribute.u4codeLength; - if (evaluated.length < codeLength) - { - evaluated = new boolean[codeLength]; - stackSizes = new int[codeLength]; - } - else - { - Arrays.fill(evaluated, 0, codeLength, false); - } - - // The initial stack is always empty. - stackSize = 0; - maxStackSize = 0; - - // Evaluate the instruction block starting at the entry point of the method. - evaluateInstructionBlock(clazz, method, codeAttribute, 0); - - // Evaluate the exception handlers. - codeAttribute.exceptionsAccept(clazz, method, this); - } - - - // Implementations for InstructionVisitor. - - public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction) - { - byte opcode = simpleInstruction.opcode; - - // Some simple instructions exit from the current instruction block. - exitInstructionBlock = - opcode == InstructionConstants.OP_IRETURN || - opcode == InstructionConstants.OP_LRETURN || - opcode == InstructionConstants.OP_FRETURN || - opcode == InstructionConstants.OP_DRETURN || - opcode == InstructionConstants.OP_ARETURN || - opcode == InstructionConstants.OP_RETURN || - opcode == InstructionConstants.OP_ATHROW; - } - - public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction) - { - // Constant pool instructions never end the current instruction block. - exitInstructionBlock = false; - } - - public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction) - { - byte opcode = variableInstruction.opcode; - - // The ret instruction end the current instruction block. - exitInstructionBlock = - opcode == InstructionConstants.OP_RET; - } - - public void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction) - { - byte opcode = branchInstruction.opcode; - - // Evaluate the target instruction blocks. - evaluateInstructionBlock(clazz, - method, - codeAttribute, - offset + - branchInstruction.branchOffset); - - // Evaluate the instructions after a subroutine branch. - if (opcode == InstructionConstants.OP_JSR || - opcode == InstructionConstants.OP_JSR_W) - { - // We assume subroutine calls (jsr and jsr_w instructions) don't - // change the stack, other than popping the return value. - stackSize -= 1; - - evaluateInstructionBlock(clazz, - method, - codeAttribute, - offset + branchInstruction.length(offset)); - } - - // Some branch instructions always end the current instruction block. - exitInstructionBlock = - opcode == InstructionConstants.OP_GOTO || - opcode == InstructionConstants.OP_GOTO_W || - opcode == InstructionConstants.OP_JSR || - opcode == InstructionConstants.OP_JSR_W; - } - - - public void visitAnySwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SwitchInstruction switchInstruction) - { - // Evaluate the target instruction blocks. - - // Loop over all jump offsets. - int[] jumpOffsets = switchInstruction.jumpOffsets; - - for (int index = 0; index < jumpOffsets.length; index++) - { - // Evaluate the jump instruction block. - evaluateInstructionBlock(clazz, - method, - codeAttribute, - offset + jumpOffsets[index]); - } - - // Also evaluate the default instruction block. - evaluateInstructionBlock(clazz, - method, - codeAttribute, - offset + switchInstruction.defaultOffset); - - // The switch instruction always ends the current instruction block. - exitInstructionBlock = true; - } - - - // Implementations for ExceptionInfoVisitor. - - public void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo) - { - if (DEBUG) - { - System.out.println("Exception:"); - } - - // The stack size when entering the exception handler is always 1. - stackSize = 1; - - // Evaluate the instruction block starting at the entry point of the - // exception handler. - evaluateInstructionBlock(clazz, - method, - codeAttribute, - exceptionInfo.u2handlerPC); - } - - - // Small utility methods. - - /** - * Evaluates a block of instructions that hasn't been handled before, - * starting at the given offset and ending at a branch instruction, a return - * instruction, or a throw instruction. Branch instructions are handled - * recursively. - */ - private void evaluateInstructionBlock(Clazz clazz, - Method method, - CodeAttribute codeAttribute, - int instructionOffset) - { - if (DEBUG) - { - if (evaluated[instructionOffset]) - { - System.out.println("-- (instruction block at "+instructionOffset+" already evaluated)"); - } - else - { - System.out.println("-- instruction block:"); - } - } - - // Remember the initial stack size. - int initialStackSize = stackSize; - - // Remember the maximum stack size. - if (maxStackSize < stackSize) - { - maxStackSize = stackSize; - } - - // Evaluate any instructions that haven't been evaluated before. - while (!evaluated[instructionOffset]) - { - // Mark the instruction as evaluated. - evaluated[instructionOffset] = true; - - Instruction instruction = InstructionFactory.create(codeAttribute.code, - instructionOffset); - - if (DEBUG) - { - int stackPushCount = instruction.stackPushCount(clazz); - int stackPopCount = instruction.stackPopCount(clazz); - System.out.println("["+instructionOffset+"]: "+ - stackSize+" - "+ - stackPopCount+" + "+ - stackPushCount+" = "+ - (stackSize+stackPushCount-stackPopCount)+": "+ - instruction.toString(instructionOffset)); - } - - // Compute the instruction's effect on the stack size. - stackSize -= instruction.stackPopCount(clazz); - - if (stackSize < 0) - { - throw new IllegalArgumentException("Stack size becomes negative after instruction "+ - instruction.toString(instructionOffset)+" in ["+ - clazz.getName()+"."+ - method.getName(clazz)+ - method.getDescriptor(clazz)+"]"); - } - - stackSizes[instructionOffset] = - stackSize += instruction.stackPushCount(clazz); - - // Remember the maximum stack size. - if (maxStackSize < stackSize) - { - maxStackSize = stackSize; - } - - // Remember the next instruction offset. - int nextInstructionOffset = instructionOffset + - instruction.length(instructionOffset); - - // Visit the instruction, in order to handle branches. - instruction.accept(clazz, method, codeAttribute, instructionOffset, this); - - // Stop evaluating after a branch. - if (exitInstructionBlock) - { - break; - } - - // Continue with the next instruction. - instructionOffset = nextInstructionOffset; - - if (DEBUG) - { - if (evaluated[instructionOffset]) - { - System.out.println("-- (instruction at "+instructionOffset+" already evaluated)"); - } - } - } - - // Restore the stack size for possible subsequent instruction blocks. - this.stackSize = initialStackSize; - } -} diff --git a/src/proguard/classfile/attribute/visitor/package.html b/src/proguard/classfile/attribute/visitor/package.html deleted file mode 100644 index 056244a..0000000 --- a/src/proguard/classfile/attribute/visitor/package.html +++ /dev/null @@ -1,3 +0,0 @@ -<body> -This package contains visitors for attributes and their components. -</body> |