// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package org.apache.commons.lang3.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.Validate; // Referenced classes of package org.apache.commons.lang3.reflect: // MemberUtils public class ConstructorUtils { public ConstructorUtils() { } public static transient Constructor getAccessibleConstructor(Class class1, Class aclass[]) { Validate.notNull(class1, "class cannot be null", new Object[0]); try { class1 = getAccessibleConstructor(class1.getConstructor(aclass)); } // Misplaced declaration of an exception variable catch (Class class1) { return null; } return class1; } public static Constructor getAccessibleConstructor(Constructor constructor) { Validate.notNull(constructor, "constructor cannot be null", new Object[0]); if (MemberUtils.isAccessible(constructor) && isAccessible(constructor.getDeclaringClass())) { return constructor; } else { return null; } } public static transient Constructor getMatchingAccessibleConstructor(Class class1, Class aclass[]) { Validate.notNull(class1, "class cannot be null", new Object[0]); Constructor constructor; try { constructor = class1.getConstructor(aclass); MemberUtils.setAccessibleWorkaround(constructor); } catch (NoSuchMethodException nosuchmethodexception) { Object obj = null; Constructor aconstructor[] = class1.getConstructors(); int j = aconstructor.length; int i = 0; for (class1 = ((Class) (obj)); i < j; class1 = ((Class) (obj))) { label0: { Constructor constructor1 = aconstructor[i]; obj = class1; if (!ClassUtils.isAssignable(aclass, constructor1.getParameterTypes(), true)) { break label0; } constructor1 = getAccessibleConstructor(constructor1); obj = class1; if (constructor1 == null) { break label0; } MemberUtils.setAccessibleWorkaround(constructor1); if (class1 != null) { obj = class1; if (MemberUtils.compareParameterTypes(constructor1.getParameterTypes(), class1.getParameterTypes(), aclass) >= 0) { break label0; } } obj = constructor1; } i++; } return class1; } return constructor; } public static transient Object invokeConstructor(Class class1, Object aobj[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { aobj = ArrayUtils.nullToEmpty(aobj); return invokeConstructor(class1, aobj, ClassUtils.toClass(aobj)); } public static Object invokeConstructor(Class class1, Object aobj[], Class aclass[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { aobj = ArrayUtils.nullToEmpty(aobj); aclass = getMatchingAccessibleConstructor(class1, ArrayUtils.nullToEmpty(aclass)); if (aclass == null) { throw new NoSuchMethodException((new StringBuilder()).append("No such accessible constructor on object: ").append(class1.getName()).toString()); } else { return aclass.newInstance(aobj); } } public static transient Object invokeExactConstructor(Class class1, Object aobj[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { aobj = ArrayUtils.nullToEmpty(aobj); return invokeExactConstructor(class1, aobj, ClassUtils.toClass(aobj)); } public static Object invokeExactConstructor(Class class1, Object aobj[], Class aclass[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { aobj = ArrayUtils.nullToEmpty(aobj); aclass = getAccessibleConstructor(class1, ArrayUtils.nullToEmpty(aclass)); if (aclass == null) { throw new NoSuchMethodException((new StringBuilder()).append("No such accessible constructor on object: ").append(class1.getName()).toString()); } else { return aclass.newInstance(aobj); } } private static boolean isAccessible(Class class1) { for (; class1 != null; class1 = class1.getEnclosingClass()) { if (!Modifier.isPublic(class1.getModifiers())) { return false; } } return true; } }