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 }