Class ReflectionUtils

java.lang.Object
org.eclipse.yasson.internal.ReflectionUtils

public class ReflectionUtils extends Object
Utility class for resolution of generics during unmarshalling.
  • Method Details

    • getOptionalRawType

      public static Optional<Class<?>> getOptionalRawType(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 Class<?> getRawType(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 Class<?> resolveRawType(List<Type> chain, Type type)
      Get a raw type of any type. If type is a TypeVariable recursively search type chain 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:
      chain - hierarchy of all wrapping types.
      type - type to resolve, typically field type or generic bound, not null.
      Returns:
      resolved raw class
    • resolveType

      public static Type resolveType(List<Type> chain, Type type)
      Resolve a type by chain. If type is a TypeVariable recursively search type chain 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:
      chain - hierarchy of all wrapping types.
      type - type to resolve, typically field type or generic bound, not null.
      Returns:
      resolved type
    • resolveOptionalType

      public static Optional<Type> resolveOptionalType(List<Type> chain, Type type)
      Resolves type by item information and wraps it with Optional.
      Parameters:
      chain - hierarchy of all wrapping types.
      type - type
      Returns:
      resolved type wrapped with Optional
    • resolveItemVariableType

      public static Type resolveItemVariableType(List<Type> chain, TypeVariable<?> typeVariable, boolean warn)
      Resolve a bounded type variable type by its wrapper types. Resolution could be done only if a compile time generic information is provided, either: by generic field or subclass of a generic class.
      Parameters:
      chain - chain to search "runtime" generic type of a TypeVariable.
      typeVariable - type to search in chain for, not null.
      warn - whether or not to log a warning message when bounds are not found
      Returns:
      Type of a generic "runtime" bound, not null.
    • resolveTypeArguments

      public static Type resolveTypeArguments(ParameterizedType typeToResolve, 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(Constructor<T> constructor)
      Create instance with constructor.
      Type Parameters:
      T - type of instance
      Parameters:
      constructor - const not null
      Returns:
      instance
    • getDefaultConstructor

      public static <T> Constructor<T> getDefaultConstructor(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 ParameterizedType findParameterizedType(Class<?> classToSearch, 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(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