001: package org.testng.internal;
002:
003: import java.util.ArrayList;
004: import java.util.List;
005: import java.util.Map;
006:
007: import org.testng.IClass;
008: import org.testng.IObjectFactory;
009: import org.testng.internal.annotations.IAnnotationFinder;
010: import org.testng.xml.XmlTest;
011:
012: /**
013: * Implementation of an IClass.
014: *
015: * @author <a href="mailto:cedric@beust.com">Cedric Beust</a>
016: */
017: public class ClassImpl implements IClass {
018: transient private Class m_class = null;
019: transient private Object m_defaultInstance = null;
020: private XmlTest m_xmlTest = null;
021: transient private IAnnotationFinder m_annotationFinder = null;
022: transient private List<Object> m_instances = new ArrayList<Object>();
023: transient private Map<Class, IClass> m_classes = null;
024: private int m_instanceCount;
025: private long[] m_instanceHashCodes;
026: private Object m_instance;
027: private IObjectFactory m_objectFactory;
028:
029: public ClassImpl(Class cls, Object instance,
030: Map<Class, IClass> classes, XmlTest xmlTest,
031: IAnnotationFinder annotationFinder,
032: IObjectFactory objectFactory) {
033: m_class = cls;
034: m_classes = classes;
035: m_xmlTest = xmlTest;
036: m_annotationFinder = annotationFinder;
037: m_instance = instance;
038: m_objectFactory = objectFactory;
039: }
040:
041: private static void ppp(String s) {
042: System.out.println("[ClassImpl] " + s);
043: }
044:
045: public String getName() {
046: return m_class.getName();
047: }
048:
049: public Class getRealClass() {
050: return m_class;
051: }
052:
053: public int getInstanceCount() {
054: return m_instanceCount;
055: }
056:
057: public long[] getInstanceHashCodes() {
058: return m_instanceHashCodes;
059: }
060:
061: private Object getDefaultInstance() {
062: if (m_defaultInstance == null) {
063: m_defaultInstance = m_instance != null ? m_instance
064: : ClassHelper.createInstance(m_class, m_classes,
065: m_xmlTest, m_annotationFinder,
066: m_objectFactory);
067: }
068:
069: return m_defaultInstance;
070: }
071:
072: public Object[] getInstances(boolean create) {
073: Object[] result = {};
074:
075: if (m_xmlTest.isJUnit()) {
076: if (create) {
077: result = new Object[] { ClassHelper.createInstance(
078: m_class, m_classes, m_xmlTest,
079: m_annotationFinder, m_objectFactory) };
080: }
081: } else {
082: result = new Object[] { getDefaultInstance() };
083: }
084: if (m_instances.size() > 0) {
085: result = m_instances
086: .toArray(new Object[m_instances.size()]);
087: }
088:
089: m_instanceCount = m_instances.size();
090: m_instanceHashCodes = new long[m_instanceCount];
091: for (int i = 0; i < m_instanceCount; i++) {
092: m_instanceHashCodes[i] = m_instances.get(i).hashCode();
093: }
094: return result;
095: }
096:
097: @Override
098: public String toString() {
099: return "[ClassImpl " + m_class.getName() + "]";
100: }
101:
102: public void addInstance(Object instance) {
103: m_instances.add(instance);
104: }
105:
106: }
|