package org.testng.internal; import org.testng.IObjectFactory; import org.testng.TestNGException; import java.lang.reflect.Constructor; /** * Default factory for test creation. * Note that if no constructor is found matching the specified parameters, * this factory will try to invoke a constructor that takes in a string object * * @since 5.6 */ public class ObjectFactoryImpl implements IObjectFactory { private static final long serialVersionUID = -4547389328475540017L; @Override public Object newInstance(Constructor constructor, Object... params) { try { constructor.setAccessible(true); return constructor.newInstance(params); } catch (IllegalAccessException | InstantiationException ex) { return ClassHelper.tryOtherConstructor(constructor.getDeclaringClass()); } catch (SecurityException e) { throw new TestNGException(constructor.getName() + " must be public", e); } catch(Exception ex) { throw new TestNGException("Cannot instantiate class " + (constructor != null ? constructor.getDeclaringClass().getName() : ": couldn't find a suitable constructor"), ex); } } }