Class ReflectionUtils


  • public class ReflectionUtils
    extends java.lang.Object
    Utility class for resolution of generics during unmarshalling.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static <T> T createNoArgConstructorInstance​(java.lang.reflect.Constructor<T> constructor)
      Create instance with constructor.
      static java.lang.reflect.ParameterizedType findParameterizedType​(java.lang.Class<?> classToSearch, java.lang.Class<?> parameterizedInterface)
      For generic adapters like:
      static <T> java.lang.reflect.Constructor<T> getDefaultConstructor​(java.lang.Class<T> clazz, boolean required)
      Get default no argument constructor of the class.
      static java.util.Optional<java.lang.Class<?>> getOptionalRawType​(java.lang.reflect.Type type)
      Get raw type by type.
      static java.lang.Class<?> getRawType​(java.lang.reflect.Type type)
      Get raw type by type.
      static boolean isResolvedType​(java.lang.reflect.Type type)
      Check if type needs resolution.
      static java.util.Optional<java.lang.reflect.Type> resolveOptionalType​(RuntimeTypeInfo info, java.lang.reflect.Type type)
      Resolves type by item information and wraps it with Optional.
      static java.lang.Class<?> resolveRawType​(RuntimeTypeInfo item, java.lang.reflect.Type type)
      Get a raw type of any type.
      static java.lang.reflect.Type resolveType​(RuntimeTypeInfo item, java.lang.reflect.Type type)
      Resolve a type by item.
      static java.lang.reflect.Type resolveTypeArguments​(java.lang.reflect.ParameterizedType typeToResolve, java.lang.reflect.Type typeToSearch)
      Resolves TypeVariable arguments of generic types.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • getOptionalRawType

        public static java.util.Optional<java.lang.Class<?>> getOptionalRawType​(java.lang.reflect.Type type)
        Get raw type by type. Only for ParametrizedTypes, GenericArrayTypes and Classes. Empty optional is returned if raw type cannot be resolved.
        Parameters:
        type - Type to get class information from, not null.
        Returns:
        Class of a type.
      • getRawType

        public static java.lang.Class<?> getRawType​(java.lang.reflect.Type type)
        Get raw type by type. Resolves only ParametrizedTypes, GenericArrayTypes and Classes. Exception is thrown if raw type cannot be resolved.
        Parameters:
        type - Type to get class information from, not null.
        Returns:
        Class of a raw type.
      • resolveRawType

        public static java.lang.Class<?> resolveRawType​(RuntimeTypeInfo item,
                                                        java.lang.reflect.Type type)
        Get a raw type of any type. If type is a TypeVariable recursively search AbstractItem for resolution of typevar. If type is a WildcardType find most specific upper / lower bound, which can be used. If most specific bound is a TypeVariable, perform typevar resolution.
        Parameters:
        item - item containing wrapper class of a type field, not null.
        type - type to resolve, typically field type or generic bound, not null.
        Returns:
        resolved raw class
      • resolveType

        public static java.lang.reflect.Type resolveType​(RuntimeTypeInfo item,
                                                         java.lang.reflect.Type type)
        Resolve a type by item. If type is a TypeVariable recursively search AbstractItem for resolution of typevar. If type is a WildcardType find most specific upper / lower bound, which can be used. If most specific bound is a TypeVariable, perform typevar resolution.
        Parameters:
        item - item containing wrapper class of a type field, not null.
        type - type to resolve, typically field type or generic bound, not null.
        Returns:
        resolved type
      • resolveOptionalType

        public static java.util.Optional<java.lang.reflect.Type> resolveOptionalType​(RuntimeTypeInfo info,
                                                                                     java.lang.reflect.Type type)
        Resolves type by item information and wraps it with Optional.
        Parameters:
        info - item information
        type - type
        Returns:
        resolved type wrapped with Optional
      • resolveTypeArguments

        public static java.lang.reflect.Type resolveTypeArguments​(java.lang.reflect.ParameterizedType typeToResolve,
                                                                  java.lang.reflect.Type typeToSearch)
        Resolves TypeVariable arguments of generic types.
        Parameters:
        typeToResolve - type to resolve
        typeToSearch - type to search
        Returns:
        resolved type
      • createNoArgConstructorInstance

        public static <T> T createNoArgConstructorInstance​(java.lang.reflect.Constructor<T> constructor)
        Create instance with constructor.
        Type Parameters:
        T - type of instance
        Parameters:
        constructor - const not null
        Returns:
        instance
      • getDefaultConstructor

        public static <T> java.lang.reflect.Constructor<T> getDefaultConstructor​(java.lang.Class<T> clazz,
                                                                                 boolean required)
        Get default no argument constructor of the class.
        Type Parameters:
        T - Class generic type
        Parameters:
        clazz - Class to get constructor from
        required - if true, throws an exception if the default constructor is missing. If false, returns null in that case
        Returns:
        the constructor of the class, or null. Depending on required.
      • findParameterizedType

        public static java.lang.reflect.ParameterizedType findParameterizedType​(java.lang.Class<?> classToSearch,
                                                                                java.lang.Class<?> parameterizedInterface)
        For generic adapters like:

        interface ContainerAdapter<T> extends JsonbAdapter<Box<T>, Crate<T>>...; class IntegerBoxToCrateAdapter implements ContainerAdapter<Integer>...;

        We need to find a JsonbAdapter class which will hold basic generic type arguments, and resolve them if they are TypeVariables from there.
        Parameters:
        classToSearch - class to resolve parameterized interface
        parameterizedInterface - interface to search
        Returns:
        type of JsonbAdapter
      • isResolvedType

        public static boolean isResolvedType​(java.lang.reflect.Type type)
        Check if type needs resolution. If type is a class or a parametrized type with all type arguments as classes than it is considered resolved. If any of types is type variable or wildcard type is not resolved.
        Parameters:
        type - Type to check.
        Returns:
        True if resolved