ConstructorUtils.java 5.07 KB
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;
import ud;

public class ConstructorUtils
{
  public static <T> Constructor<T> getAccessibleConstructor(Class<T> paramClass, Class<?>... paramVarArgs)
  {
    Validate.notNull(paramClass, "class cannot be null", new Object[0]);
    try
    {
      paramClass = getAccessibleConstructor(paramClass.getConstructor(paramVarArgs));
      return paramClass;
    }
    catch (NoSuchMethodException paramClass) {}
    return null;
  }
  
  public static <T> Constructor<T> getAccessibleConstructor(Constructor<T> paramConstructor)
  {
    int i = 0;
    Validate.notNull(paramConstructor, "constructor cannot be null", new Object[0]);
    if (ud.a(paramConstructor))
    {
      Class localClass = paramConstructor.getDeclaringClass();
      if (localClass != null) {
        if (Modifier.isPublic(localClass.getModifiers())) {}
      }
      for (;;)
      {
        if (i == 0) {
          break label58;
        }
        return paramConstructor;
        localClass = localClass.getEnclosingClass();
        break;
        i = 1;
      }
    }
    label58:
    return null;
  }
  
  public static <T> Constructor<T> getMatchingAccessibleConstructor(Class<T> paramClass, Class<?>... paramVarArgs)
  {
    Validate.notNull(paramClass, "class cannot be null", new Object[0]);
    Object localObject;
    Constructor[] arrayOfConstructor;
    int j;
    int i;
    try
    {
      Constructor localConstructor1 = paramClass.getConstructor(paramVarArgs);
      ud.a(localConstructor1);
      return localConstructor1;
    }
    catch (NoSuchMethodException localNoSuchMethodException)
    {
      localObject = null;
      arrayOfConstructor = paramClass.getConstructors();
      j = arrayOfConstructor.length;
      i = 0;
      paramClass = (Class<T>)localObject;
    }
    for (;;)
    {
      localObject = paramClass;
      if (i >= j) {
        break;
      }
      Constructor localConstructor2 = arrayOfConstructor[i];
      localObject = paramClass;
      if (ud.a(localConstructor2, paramVarArgs))
      {
        localConstructor2 = getAccessibleConstructor(localConstructor2);
        localObject = paramClass;
        if (localConstructor2 != null)
        {
          ud.a(localConstructor2);
          if (paramClass != null)
          {
            localObject = paramClass;
            if (ud.a(localConstructor2, paramClass, paramVarArgs) >= 0) {}
          }
          else
          {
            localObject = localConstructor2;
          }
        }
      }
      i += 1;
      paramClass = (Class<T>)localObject;
    }
  }
  
  public static <T> T invokeConstructor(Class<T> paramClass, Object... paramVarArgs)
    throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
  {
    paramVarArgs = ArrayUtils.nullToEmpty(paramVarArgs);
    return (T)invokeConstructor(paramClass, paramVarArgs, ClassUtils.toClass(paramVarArgs));
  }
  
  public static <T> T invokeConstructor(Class<T> paramClass, Object[] paramArrayOfObject, Class<?>[] paramArrayOfClass)
    throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
  {
    paramArrayOfObject = ArrayUtils.nullToEmpty(paramArrayOfObject);
    paramArrayOfClass = getMatchingAccessibleConstructor(paramClass, ArrayUtils.nullToEmpty(paramArrayOfClass));
    if (paramArrayOfClass == null) {
      throw new NoSuchMethodException("No such accessible constructor on object: " + paramClass.getName());
    }
    paramClass = paramArrayOfObject;
    if (paramArrayOfClass.isVarArgs()) {
      paramClass = MethodUtils.a(paramArrayOfObject, paramArrayOfClass.getParameterTypes());
    }
    return (T)paramArrayOfClass.newInstance(paramClass);
  }
  
  public static <T> T invokeExactConstructor(Class<T> paramClass, Object... paramVarArgs)
    throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
  {
    paramVarArgs = ArrayUtils.nullToEmpty(paramVarArgs);
    return (T)invokeExactConstructor(paramClass, paramVarArgs, ClassUtils.toClass(paramVarArgs));
  }
  
  public static <T> T invokeExactConstructor(Class<T> paramClass, Object[] paramArrayOfObject, Class<?>[] paramArrayOfClass)
    throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
  {
    paramArrayOfObject = ArrayUtils.nullToEmpty(paramArrayOfObject);
    paramArrayOfClass = getAccessibleConstructor(paramClass, ArrayUtils.nullToEmpty(paramArrayOfClass));
    if (paramArrayOfClass == null) {
      throw new NoSuchMethodException("No such accessible constructor on object: " + paramClass.getName());
    }
    return (T)paramArrayOfClass.newInstance(paramArrayOfObject);
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/org/apache/commons/lang3/reflect/ConstructorUtils.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */