View Javadoc

1   package net.sourceforge.pmd.util;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   
6   /**
7    * A specialized map that stores classes by both their full and short names.
8    * 
9    * @author Brian Remedios
10   */
11  public class TypeMap {
12  
13  	private Map<String, Class> typesByName;
14  	
15  	/**
16  	 * Constructor for TypeMap.
17  	 * @param initialSize int
18  	 */
19  	public TypeMap(int initialSize) {
20  		typesByName = new HashMap<String, Class>(initialSize);
21  	}
22  
23  	/**
24  	 * Constructor for TypeMap that takes in an initial set of types.
25  	 * 
26  	 * @param types Class[]
27  	 */
28  	public TypeMap(Class... types) {
29  		this(types.length);
30  		add(types);
31  	}
32  	
33  	/**
34  	 * Adds a type to the receiver and stores it keyed by both its full
35  	 * and short names.
36  	 * 
37  	 * @param type Class
38  	 */
39  	public void add(Class type) {
40  		typesByName.put(type.getName(), type);
41  		typesByName.put(ClassUtil.withoutPackageName(type.getName()), type);
42  	}
43  	
44  	/**
45  	 * Returns whether the type is known to the receiver.
46  	 * 
47  	 * @param type Class
48  	 * @return boolean
49  	 */
50  	public boolean contains(Class type) {
51  		return typesByName.containsValue(type);
52  	}
53  	
54  	/**
55  	 * Returns whether the typeName is known to the receiver.
56  	 * 
57  	 * @param typeName String
58  	 * @return boolean
59  	 */
60  	public boolean contains(String typeName) {
61  		return typesByName.containsKey(typeName);
62  	}
63  	
64  	/**
65  	 * Returns the type for the typeName specified.
66  	 * 
67  	 * @param typeName String
68  	 * @return Class
69  	 */
70  	public Class typeFor(String typeName) {
71  		return typesByName.get(typeName);
72  	}
73  	
74  	/**
75  	 * Adds an array of types to the receiver at once.
76  	 * 
77  	 * @param types Class[]
78  	 */
79  	public void add(Class... types) {
80  		for (int i=0; i<types.length; i++) {
81  			add(types[i]);
82  		}
83  	}
84  }