package org.qi4j.library.struts2.util;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public final class ParameterizedTypes
{
private ParameterizedTypes()
{
}
public static <S, T extends S> Type[] findTypeVariables( Class<T> type, Class<S> searchType )
{
return ParameterizedTypes.findParameterizedType( type, searchType ).getActualTypeArguments();
}
public static <S, T extends S> ParameterizedType findParameterizedType( Class<T> type, Class<S> searchType )
{
return ParameterizedTypes.findParameterizedType( (Type) type, searchType );
}
static ParameterizedType findParameterizedType( Type type, Type searchType )
{
if( type instanceof ParameterizedType && ( (ParameterizedType) type ).getRawType().equals( searchType ) )
{
return (ParameterizedType) type;
}
Type[] parents = ( (Class<?>) type ).getGenericInterfaces();
for( Type parent : parents )
{
ParameterizedType foundType = findParameterizedType( parent, searchType );
if( foundType != null )
{
return foundType;
}
}
return null;
}
}