Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/puppycrawl/tools/checkstyle/api/Scope.java


1   ////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code for adherence to a set of rules.
3   // Copyright (C) 2001-2003  Oliver Burn
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  package com.puppycrawl.tools.checkstyle.api;
20  
21  import java.io.Serializable;
22  import java.util.HashMap;
23  import java.util.Map;
24  
25  /**
26   * Represents a Java visibility scope.
27   *
28   * @author <a href="mailto:lkuehne@users.sourceforge.net">Lars Kühne</a>
29   */
30  public final class Scope implements Comparable, Serializable
31  {
32      // Note that although this class might seem to be an
33      // implementation detail, this class has to be public because it
34      // is used as a parameter in GlobalProperties.setJavadocScope()
35  
36      /** poor man's enum for nothing scope */
37      private static final int SCOPECODE_NOTHING = 0;
38      /** poor man's enum for public scope */
39      private static final int SCOPECODE_PUBLIC = 1;
40      /** poor man's enum for protected scope */
41      private static final int SCOPECODE_PROTECTED = 2;
42      /** poor man's enum for package scope */
43      private static final int SCOPECODE_PACKAGE = 3;
44      /** poor man's enum for private scope */
45      private static final int SCOPECODE_PRIVATE = 4;
46      /** poor man's enum for anonymous inner class scope */
47      private static final int SCOPECODE_ANONINNER = 5;
48  
49      /** none scopename */
50      private static final String SCOPENAME_NOTHING = "nothing";
51      /** public scopename */
52      private static final String SCOPENAME_PUBLIC = "public";
53      /** protected scopename */
54      private static final String SCOPENAME_PROTECTED = "protected";
55      /** package scopename */
56      private static final String SCOPENAME_PACKAGE = "package";
57      /** private scopename */
58      private static final String SCOPENAME_PRIVATE = "private";
59      /** anon inner scopename */
60      private static final String SCOPENAME_ANONINNER = "anoninner";
61  
62      /** nothing scope. */
63      public static final Scope NOTHING =
64          new Scope(SCOPECODE_NOTHING, SCOPENAME_NOTHING);
65  
66      /** public scope. */
67      public static final Scope PUBLIC =
68          new Scope(SCOPECODE_PUBLIC, SCOPENAME_PUBLIC);
69  
70      /** protected scope. */
71      public static final Scope PROTECTED =
72          new Scope(SCOPECODE_PROTECTED, SCOPENAME_PROTECTED);
73  
74      /** package scope. */
75      public static final Scope PACKAGE =
76          new Scope(SCOPECODE_PACKAGE, SCOPENAME_PACKAGE);
77  
78      /** private scope. */
79      public static final Scope PRIVATE =
80          new Scope(SCOPECODE_PRIVATE, SCOPENAME_PRIVATE);
81  
82      /** anon inner scope. */
83      public static final Scope ANONINNER =
84          new Scope(SCOPECODE_ANONINNER, SCOPENAME_ANONINNER);
85  
86      /** map from scope names to the respective Scope */
87      private static final Map NAME_TO_SCOPE = new HashMap();
88      static {
89          NAME_TO_SCOPE.put(SCOPENAME_NOTHING, NOTHING);
90          NAME_TO_SCOPE.put(SCOPENAME_PUBLIC, PUBLIC);
91          NAME_TO_SCOPE.put(SCOPENAME_PROTECTED, PROTECTED);
92          NAME_TO_SCOPE.put(SCOPENAME_PACKAGE, PACKAGE);
93          NAME_TO_SCOPE.put(SCOPENAME_PRIVATE, PRIVATE);
94          NAME_TO_SCOPE.put(SCOPENAME_ANONINNER, ANONINNER);
95      }
96  
97      /** the SCOPECODE_XYZ value of this scope. */
98      private final int mCode;
99  
100     /** the name of this scope. */
101     private final String mName;
102 
103     /**
104      * @see Object
105      */
106     public String toString()
107     {
108         return "Scope[" + mCode + " (" + mName + ")]";
109     }
110 
111     /**
112      * @return the name of this scope.
113      */
114     public String getName()
115     {
116         return mName;
117     }
118 
119     /**
120      * @see Comparable
121      */
122     public int compareTo(Object aObject)
123     {
124         final Scope s = (Scope) aObject;
125         return this.mCode - s.mCode;
126     }
127 
128     /**
129      * Checks if this scope is a subscope of another scope.
130      * Example: PUBLIC is a subscope of PRIVATE.
131      *
132      * @param aScope a <code>Scope</code> value
133      * @return if <code>this</code> is a subscope of <code>aScope</code>.
134      */
135     public boolean isIn(Scope aScope)
136     {
137         return (compareTo(aScope) <= 0);
138     }
139 
140     /**
141      * Creates a new <code>Scope</code> instance.
142      *
143      * @param aCode one of the SCOPECODE_XYZ values.
144      * @param aName one of the SCOPENAME_XYZ values.
145      */
146     private Scope(int aCode, String aName)
147     {
148         mCode = aCode;
149         mName = aName;
150     }
151 
152     /**
153      * Scope factory method.
154      *
155      * @param aScopeName scope name, such as "nothing", "public", etc.
156      * @return the <code>Scope</code> associated with <code>aScopeName</code>
157      */
158     public static Scope getInstance(String aScopeName)
159     {
160         // TODO: change scope....
161         // canonicalize argument
162         final String scopeName = aScopeName.trim().toLowerCase();
163 
164         final Scope retVal = (Scope) NAME_TO_SCOPE.get(scopeName);
165         if (retVal == null) {
166             throw new IllegalArgumentException(scopeName);
167         }
168         return retVal;
169     }
170 
171     /**
172      * Ensures that we don't get multiple instances of one Scope
173      * during deserialization. See Section 3.6 of the Java Object
174      * Serialization Specification for details.
175      *
176      * @return the serialization replacement object
177      */
178     private Object readResolve()
179     {
180         return getInstance(mName);
181     }
182 }