KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > proguard > classfile > visitor > ClassAccessFilter


1 /*
2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
3  * of Java bytecode.
4  *
5  * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * Software Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */

21 package proguard.classfile.visitor;
22
23 import proguard.classfile.*;
24
25
26 /**
27  * This <code>ClassVisitor</code> delegates its visits to another given
28  * <code>ClassVisitor</code>, but only when the visited class
29  * has the proper access flags.
30  *
31  * @see ClassConstants
32  *
33  * @author Eric Lafortune
34  */

35 public class ClassAccessFilter implements ClassVisitor
36 {
37     private int requiredSetAccessFlags;
38     private int requiredUnsetAccessFlags;
39     private ClassVisitor classVisitor;
40
41
42     /**
43      * Creates a new ClassAccessFilter.
44      * @param requiredSetAccessFlags the class access flags that should be
45      * set.
46      * @param requiredUnsetAccessFlags the class access flags that should be
47      * unset.
48      * @param classVisitor the <code>ClassVisitor</code> to
49      * which visits will be delegated.
50      */

51     public ClassAccessFilter(int requiredSetAccessFlags,
52                              int requiredUnsetAccessFlags,
53                              ClassVisitor classVisitor)
54     {
55         this.requiredSetAccessFlags = requiredSetAccessFlags;
56         this.requiredUnsetAccessFlags = requiredUnsetAccessFlags;
57         this.classVisitor = classVisitor;
58     }
59
60
61     // Implementations for ClassVisitor.
62

63     public void visitProgramClass(ProgramClass programClass)
64     {
65         if (accepted(programClass.getAccessFlags()))
66         {
67             classVisitor.visitProgramClass(programClass);
68         }
69     }
70
71
72     public void visitLibraryClass(LibraryClass libraryClass)
73     {
74         if (accepted(libraryClass.getAccessFlags()))
75         {
76             classVisitor.visitLibraryClass(libraryClass);
77         }
78     }
79
80
81     // Small utility methods.
82

83     private boolean accepted(int accessFlags)
84     {
85         return (requiredSetAccessFlags & ~accessFlags) == 0 &&
86                (requiredUnsetAccessFlags & accessFlags) == 0;
87     }
88 }
89
Popular Tags