1 package org.testng.internal; 2 3 import org.testng.collections.Maps; 4 import org.testng.xml.XmlClass; 5 6 import java.util.List; 7 import java.util.Map; 8 import java.util.Set; 9 10 public class ClassInfoMap { 11 private Map<Class<?>, XmlClass> m_map = Maps.newLinkedHashMap(); 12 private boolean includeNestedClasses; 13 14 public ClassInfoMap() { 15 } 16 17 public ClassInfoMap(List<XmlClass> classes) { 18 this(classes, true); 19 } 20 21 public ClassInfoMap(List<XmlClass> classes, boolean includeNested) { 22 includeNestedClasses = includeNested; 23 for (XmlClass xmlClass : classes) { 24 try { 25 Class c = xmlClass.getSupportClass(); 26 registerClass(c, xmlClass); 27 } catch (NoClassDefFoundError e) { 28 Utils.log("[ClassInfoMap]", 1, "Unable to open class " + xmlClass.getName() 29 + " - unable to resolve class reference " + e.getMessage()); 30 if (xmlClass.loadClasses()) { 31 throw e; 32 } 33 } 34 } 35 } 36 37 private void registerClass(Class cl, XmlClass xmlClass) { 38 m_map.put(cl, xmlClass); 39 if (includeNestedClasses) { 40 for (Class c : cl.getClasses()) { 41 if (! m_map.containsKey(c)) registerClass(c, xmlClass); 42 } 43 } 44 } 45 46 public void addClass(Class<?> cls) { 47 m_map.put(cls, null); 48 } 49 50 public XmlClass getXmlClass(Class<?> cls) { 51 return m_map.get(cls); 52 } 53 54 public void put(Class<?> cls, XmlClass xmlClass) { 55 m_map.put(cls, xmlClass); 56 } 57 58 public Set<Class<?>> getClasses() { 59 return m_map.keySet(); 60 } 61 62 public int getSize() { 63 return m_map.size(); 64 } 65 } 66