KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > proguard > MemberSpecification


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;
22
23
24 /**
25  * This class stores a specification of class members. The specification is
26  * template-based: the class member names and descriptors can contain wildcards.
27  *
28  * @author Eric Lafortune
29  */

30 public class MemberSpecification
31 {
32     public int requiredSetAccessFlags;
33     public int requiredUnsetAccessFlags;
34     public String JavaDoc annotationType;
35     public String JavaDoc name;
36     public String JavaDoc descriptor;
37
38
39     /**
40      * Creates a new option to keep all possible class members.
41      */

42     public MemberSpecification()
43     {
44         this(0,
45              0,
46              null,
47              null,
48              null);
49     }
50
51
52     /**
53      * Creates a new option to keep the specified class member(s).
54      *
55      * @param requiredSetAccessFlags the class access flags that must be set
56      * in order for the class to apply.
57      * @param requiredUnsetAccessFlags the class access flags that must be unset
58      * in order for the class to apply.
59      * @param annotationType the name of the class that must be an
60      * annotation in order for the class member
61      * to apply. The name may be null to specify
62      * that no annotation is required.
63      * @param name the class member name. The name may be
64      * null to specify any class member or it
65      * may contain "*" or "?" wildcards.
66      * @param descriptor the class member descriptor. The
67      * descriptor may be null to specify any
68      * class member or it may contain
69      * "**", "*", or "?" wildcards.
70      */

71     public MemberSpecification(int requiredSetAccessFlags,
72                                int requiredUnsetAccessFlags,
73                                String JavaDoc annotationType,
74                                String JavaDoc name,
75                                String JavaDoc descriptor)
76     {
77         this.requiredSetAccessFlags = requiredSetAccessFlags;
78         this.requiredUnsetAccessFlags = requiredUnsetAccessFlags;
79         this.annotationType = annotationType;
80         this.name = name;
81         this.descriptor = descriptor;
82     }
83
84
85
86     // Implementations for Object.
87

88     public boolean equals(Object JavaDoc object)
89     {
90         if (object == null ||
91             this.getClass() != object.getClass())
92         {
93             return false;
94         }
95
96         MemberSpecification other = (MemberSpecification)object;
97         return
98             (this.requiredSetAccessFlags == other.requiredSetAccessFlags ) &&
99             (this.requiredUnsetAccessFlags == other.requiredUnsetAccessFlags ) &&
100             (this.annotationType == null ? other.annotationType == null : this.annotationType.equals(other.annotationType)) &&
101             (this.name == null ? other.name == null : this.name.equals(other.name) ) &&
102             (this.descriptor == null ? other.descriptor == null : this.descriptor.equals(other.descriptor) );
103     }
104
105     public int hashCode()
106     {
107         return
108             (requiredSetAccessFlags ) ^
109             (requiredUnsetAccessFlags ) ^
110             (annotationType == null ? 0 : annotationType.hashCode()) ^
111             (name == null ? 0 : name.hashCode() ) ^
112             (descriptor == null ? 0 : descriptor.hashCode() );
113     }
114 }
115
Popular Tags