Home | History | Annotate | Download | only in visitor
      1 /*
      2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
      3  *             of Java bytecode.
      4  *
      5  * Copyright (c) 2002-2014 Eric Lafortune (eric (at) graphics.cornell.edu)
      6  *
      7  * This program is free software; you can redistribute it and/or modify it
      8  * under the terms of the GNU General Public License as published by the Free
      9  * Software Foundation; either version 2 of the License, or (at your option)
     10  * any later version.
     11  *
     12  * This program is distributed in the hope that it will be useful, but WITHOUT
     13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
     15  * more details.
     16  *
     17  * You should have received a copy of the GNU General Public License along
     18  * with this program; if not, write to the Free Software Foundation, Inc.,
     19  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     20  */
     21 package proguard.classfile.attribute.visitor;
     22 
     23 import proguard.classfile.*;
     24 import proguard.classfile.attribute.*;
     25 import proguard.classfile.attribute.annotation.*;
     26 import proguard.classfile.attribute.preverification.*;
     27 
     28 /**
     29  * This AttributeVisitor delegates its visits another AttributeVisitor, but
     30  * only when the visited attribute is not empty. For instance, a local variable
     31  * table without variables is empty.
     32  *
     33  * @author Eric Lafortune
     34  */
     35 public class NonEmptyAttributeFilter
     36 implements   AttributeVisitor
     37 {
     38     private final AttributeVisitor attributeVisitor;
     39 
     40 
     41     /**
     42      * Creates a new NonEmptyAttributeFilter.
     43      * @param attributeVisitor the <code>AttributeVisitor</code> to which
     44      *                         visits will be delegated.
     45      */
     46     public NonEmptyAttributeFilter(AttributeVisitor attributeVisitor)
     47     {
     48         this.attributeVisitor = attributeVisitor;
     49     }
     50 
     51 
     52     // Implementations for AttributeVisitor.
     53 
     54     public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute)
     55     {
     56         attributeVisitor.visitUnknownAttribute(clazz, unknownAttribute);
     57     }
     58 
     59 
     60     public void visitBootstrapMethodsAttribute(Clazz clazz, BootstrapMethodsAttribute bootstrapMethodsAttribute)
     61     {
     62         if (bootstrapMethodsAttribute.u2bootstrapMethodsCount > 0)
     63         {
     64             attributeVisitor.visitBootstrapMethodsAttribute(clazz, bootstrapMethodsAttribute);
     65         }
     66     }
     67 
     68 
     69     public void visitSourceFileAttribute(Clazz clazz, SourceFileAttribute sourceFileAttribute)
     70     {
     71         attributeVisitor.visitSourceFileAttribute(clazz, sourceFileAttribute);
     72     }
     73 
     74 
     75     public void visitSourceDirAttribute(Clazz clazz, SourceDirAttribute sourceDirAttribute)
     76     {
     77         attributeVisitor.visitSourceDirAttribute(clazz, sourceDirAttribute);
     78     }
     79 
     80 
     81     public void visitInnerClassesAttribute(Clazz clazz, InnerClassesAttribute innerClassesAttribute)
     82     {
     83         if (innerClassesAttribute.u2classesCount > 0)
     84         {
     85             attributeVisitor.visitInnerClassesAttribute(clazz, innerClassesAttribute);
     86         }
     87     }
     88 
     89 
     90     public void visitEnclosingMethodAttribute(Clazz clazz, EnclosingMethodAttribute enclosingMethodAttribute)
     91     {
     92         attributeVisitor.visitEnclosingMethodAttribute(clazz, enclosingMethodAttribute);
     93     }
     94 
     95 
     96     public void visitDeprecatedAttribute(Clazz clazz, DeprecatedAttribute deprecatedAttribute)
     97     {
     98         attributeVisitor.visitDeprecatedAttribute(clazz, deprecatedAttribute);
     99     }
    100 
    101 
    102     public void visitDeprecatedAttribute(Clazz clazz, Field field, DeprecatedAttribute deprecatedAttribute)
    103     {
    104         attributeVisitor.visitDeprecatedAttribute(clazz, field, deprecatedAttribute);
    105     }
    106 
    107 
    108     public void visitDeprecatedAttribute(Clazz clazz, Method method, DeprecatedAttribute deprecatedAttribute)
    109     {
    110         attributeVisitor.visitDeprecatedAttribute(clazz, method, deprecatedAttribute);
    111     }
    112 
    113 
    114     public void visitSyntheticAttribute(Clazz clazz, SyntheticAttribute syntheticAttribute)
    115     {
    116         attributeVisitor.visitSyntheticAttribute(clazz, syntheticAttribute);
    117     }
    118 
    119 
    120     public void visitSyntheticAttribute(Clazz clazz, Field field, SyntheticAttribute syntheticAttribute)
    121     {
    122         attributeVisitor.visitSyntheticAttribute(clazz, field, syntheticAttribute);
    123     }
    124 
    125 
    126     public void visitSyntheticAttribute(Clazz clazz, Method method, SyntheticAttribute syntheticAttribute)
    127     {
    128         attributeVisitor.visitSyntheticAttribute(clazz, method, syntheticAttribute);
    129     }
    130 
    131 
    132     public void visitSignatureAttribute(Clazz clazz, SignatureAttribute signatureAttribute)
    133     {
    134         attributeVisitor.visitSignatureAttribute(clazz, signatureAttribute);
    135     }
    136 
    137 
    138     public void visitSignatureAttribute(Clazz clazz, Field field, SignatureAttribute signatureAttribute)
    139     {
    140         attributeVisitor.visitSignatureAttribute(clazz, field, signatureAttribute);
    141     }
    142 
    143 
    144     public void visitSignatureAttribute(Clazz clazz, Method method, SignatureAttribute signatureAttribute)
    145     {
    146         attributeVisitor.visitSignatureAttribute(clazz, method, signatureAttribute);
    147     }
    148 
    149 
    150     public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute)
    151     {
    152         attributeVisitor.visitConstantValueAttribute(clazz, field, constantValueAttribute);
    153     }
    154 
    155 
    156     public void visitMethodParametersAttribute(Clazz clazz, Method method, MethodParametersAttribute exceptionsAttribute)
    157     {
    158         if (exceptionsAttribute.u1parametersCount > 0)
    159         {
    160             attributeVisitor.visitMethodParametersAttribute(clazz, method, exceptionsAttribute);
    161         }
    162     }
    163 
    164 
    165     public void visitExceptionsAttribute(Clazz clazz, Method method, ExceptionsAttribute exceptionsAttribute)
    166     {
    167         if (exceptionsAttribute.u2exceptionIndexTableLength > 0)
    168         {
    169             attributeVisitor.visitExceptionsAttribute(clazz, method, exceptionsAttribute);
    170         }
    171     }
    172 
    173 
    174     public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
    175     {
    176         attributeVisitor.visitCodeAttribute(clazz, method, codeAttribute);
    177     }
    178 
    179 
    180     public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute)
    181     {
    182         if (stackMapAttribute.u2stackMapFramesCount > 0)
    183         {
    184             attributeVisitor.visitStackMapAttribute(clazz, method, codeAttribute, stackMapAttribute);
    185         }
    186     }
    187 
    188 
    189     public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute)
    190     {
    191         if (stackMapTableAttribute.u2stackMapFramesCount > 0)
    192         {
    193             attributeVisitor.visitStackMapTableAttribute(clazz, method, codeAttribute, stackMapTableAttribute);
    194         }
    195     }
    196 
    197 
    198     public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute)
    199     {
    200         if (lineNumberTableAttribute.u2lineNumberTableLength > 0)
    201         {
    202             attributeVisitor.visitLineNumberTableAttribute(clazz, method, codeAttribute, lineNumberTableAttribute);
    203         }
    204     }
    205 
    206 
    207     public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute)
    208     {
    209         if (localVariableTableAttribute.u2localVariableTableLength > 0)
    210         {
    211             attributeVisitor.visitLocalVariableTableAttribute(clazz, method, codeAttribute, localVariableTableAttribute);
    212         }
    213     }
    214 
    215 
    216     public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute)
    217     {
    218         if (localVariableTypeTableAttribute.u2localVariableTypeTableLength > 0)
    219         {
    220             attributeVisitor.visitLocalVariableTypeTableAttribute(clazz, method, codeAttribute, localVariableTypeTableAttribute);
    221         }
    222     }
    223 
    224 
    225     public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute)
    226     {
    227         if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0)
    228         {
    229             attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, runtimeVisibleAnnotationsAttribute);
    230         }
    231     }
    232 
    233 
    234     public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute)
    235     {
    236         if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0)
    237         {
    238             attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, field, runtimeVisibleAnnotationsAttribute);
    239         }
    240     }
    241 
    242 
    243     public void visitRuntimeVisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute)
    244     {
    245         if (runtimeVisibleAnnotationsAttribute.u2annotationsCount > 0)
    246         {
    247             attributeVisitor.visitRuntimeVisibleAnnotationsAttribute(clazz, method, runtimeVisibleAnnotationsAttribute);
    248         }
    249     }
    250 
    251 
    252     public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute)
    253     {
    254         if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0)
    255         {
    256             attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, runtimeInvisibleAnnotationsAttribute);
    257         }
    258     }
    259 
    260 
    261     public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute)
    262     {
    263         if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0)
    264         {
    265             attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, field, runtimeInvisibleAnnotationsAttribute);
    266         }
    267     }
    268 
    269 
    270     public void visitRuntimeInvisibleAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute)
    271     {
    272         if (runtimeInvisibleAnnotationsAttribute.u2annotationsCount > 0)
    273         {
    274             attributeVisitor.visitRuntimeInvisibleAnnotationsAttribute(clazz, method, runtimeInvisibleAnnotationsAttribute);
    275         }
    276     }
    277 
    278 
    279     public void visitRuntimeVisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute)
    280     {
    281         if (runtimeVisibleParameterAnnotationsAttribute.u1parametersCount > 0)
    282         {
    283             attributeVisitor.visitRuntimeVisibleParameterAnnotationsAttribute(clazz, method, runtimeVisibleParameterAnnotationsAttribute);
    284         }
    285     }
    286 
    287 
    288     public void visitRuntimeInvisibleParameterAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute)
    289     {
    290         if (runtimeInvisibleParameterAnnotationsAttribute.u1parametersCount > 0)
    291         {
    292             attributeVisitor.visitRuntimeInvisibleParameterAnnotationsAttribute(clazz, method, runtimeInvisibleParameterAnnotationsAttribute);
    293         }
    294     }
    295 
    296 
    297     public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute)
    298     {
    299         if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    300         {
    301             attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, runtimeVisibleTypeAnnotationsAttribute);
    302         }
    303     }
    304 
    305 
    306     public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute)
    307     {
    308         if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    309         {
    310             attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, field, runtimeVisibleTypeAnnotationsAttribute);
    311         }
    312     }
    313 
    314 
    315     public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute)
    316     {
    317         if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    318         {
    319             attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, runtimeVisibleTypeAnnotationsAttribute);
    320         }
    321     }
    322 
    323 
    324     public void visitRuntimeVisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeVisibleTypeAnnotationsAttribute runtimeVisibleTypeAnnotationsAttribute)
    325     {
    326         if (runtimeVisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    327         {
    328             attributeVisitor.visitRuntimeVisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeVisibleTypeAnnotationsAttribute);
    329         }
    330     }
    331 
    332 
    333     public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute)
    334     {
    335         if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    336         {
    337             attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, runtimeInvisibleTypeAnnotationsAttribute);
    338         }
    339     }
    340 
    341 
    342     public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Field field, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute)
    343     {
    344         if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    345         {
    346             attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, field, runtimeInvisibleTypeAnnotationsAttribute);
    347         }
    348     }
    349 
    350 
    351     public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute)
    352     {
    353         if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    354         {
    355             attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, runtimeInvisibleTypeAnnotationsAttribute);
    356         }
    357     }
    358 
    359 
    360     public void visitRuntimeInvisibleTypeAnnotationsAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, RuntimeInvisibleTypeAnnotationsAttribute runtimeInvisibleTypeAnnotationsAttribute)
    361     {
    362         if (runtimeInvisibleTypeAnnotationsAttribute.u2annotationsCount > 0)
    363         {
    364             attributeVisitor.visitRuntimeInvisibleTypeAnnotationsAttribute(clazz, method, codeAttribute, runtimeInvisibleTypeAnnotationsAttribute);
    365         }
    366     }
    367 
    368 
    369     public void visitAnnotationDefaultAttribute(Clazz clazz, Method method, AnnotationDefaultAttribute annotationDefaultAttribute)
    370     {
    371         attributeVisitor.visitAnnotationDefaultAttribute(clazz, method, annotationDefaultAttribute);
    372     }
    373 }
    374