/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.furnace.container.cdi.util;
import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Types
{
public static Class<?> boxPrimitive(Class<?> cls)
{
if (cls == int.class || cls == Integer.class)
{
return Integer.class;
}
else if (cls == int[].class || cls == Integer[].class)
{
return Integer[].class;
}
else if (cls == char.class || cls == Character.class)
{
return Character.class;
}
else if (cls == char[].class || cls == Character[].class)
{
return Character[].class;
}
else if (cls == long.class || cls == Long.class)
{
return Long.class;
}
else if (cls == long[].class || cls == Long[].class)
{
return Long[].class;
}
else if (cls == short.class || cls == Short.class)
{
return Short.class;
}
else if (cls == short[].class || cls == Short[].class)
{
return Short[].class;
}
else if (cls == double.class || cls == Double.class)
{
return Double.class;
}
else if (cls == double[].class || cls == Double[].class)
{
return Double[].class;
}
else if (cls == float.class || cls == Float.class)
{
return Float.class;
}
else if (cls == float[].class || cls == Float[].class)
{
return Float[].class;
}
else if (cls == boolean.class || cls == Boolean.class)
{
return Boolean.class;
}
else if (cls == boolean[].class || cls == Boolean[].class)
{
return Boolean[].class;
}
else if (cls == byte.class || cls == Byte.class)
{
return Byte.class;
}
else if (cls == byte[].class || cls == Byte[].class)
{
return Byte[].class;
}
return cls;
}
public static Class<?> unboxPrimitive(Class<?> cls)
{
if (cls == Integer.class || cls == int.class)
{
return int.class;
}
else if (cls == Integer[].class || cls == int[].class)
{
return int[].class;
}
else if (cls == Long.class || cls == long.class)
{
return long.class;
}
else if (cls == Long[].class || cls == long[].class)
{
return long[].class;
}
else if (cls == Character.class || cls == char.class)
{
return char.class;
}
else if (cls == Character[].class || cls == char[].class)
{
return char[].class;
}
else if (cls == Short.class || cls == short.class)
{
return short.class;
}
else if (cls == Short[].class || cls == short[].class)
{
return short[].class;
}
else if (cls == Double.class || cls == double.class)
{
return double.class;
}
else if (cls == Double[].class || cls == double[].class)
{
return double[].class;
}
else if (cls == Float.class || cls == float.class)
{
return float.class;
}
else if (cls == Float[].class || cls == float[].class)
{
return float[].class;
}
else if (cls == Boolean.class || cls == boolean.class)
{
return boolean.class;
}
else if (cls == Boolean[].class || cls == boolean[].class)
{
return boolean[].class;
}
else if (cls == Byte.class || cls == byte.class)
{
return byte.class;
}
else if (cls == Byte[].class || cls == byte[].class)
{
return byte[].class;
}
return cls;
}
public static Class<?> toClass(Type baseType)
{
Class<?> result = null;
if (baseType instanceof Class)
{
result = (Class<?>) baseType;
}
else if (baseType instanceof ParameterizedType)
{
ParameterizedType parameterizedType = (ParameterizedType) baseType;
Type rawType = parameterizedType.getRawType();
if (rawType instanceof Class)
{
result = (Class<?>) rawType;
}
}
else if (baseType instanceof GenericArrayType)
{
GenericArrayType parameterizedType = (GenericArrayType) baseType;
Type genericType = parameterizedType.getGenericComponentType();
if (genericType instanceof Class)
{
result = (Class<?>) genericType;
}
}
return result;
}
public static Class<?> toClass(Member member)
{
Class<?> result;
if (member instanceof Field)
result = toClass(((Field) member).getType());
if (member instanceof Method)
result = toClass(((Method) member).getReturnType());
else
throw new IllegalArgumentException("Types may only be inspected on Field and Method instances.");
if (result.isArray())
result = result.getComponentType();
return result;
}
}