Class TypeDescription.Generic.LazyProjection

All Implemented Interfaces:
Iterable<TypeDefinition>, AnnotationSource, ModifierReviewable, ModifierReviewable.ForFieldDescription, ModifierReviewable.ForMethodDescription, ModifierReviewable.ForParameterDescription, ModifierReviewable.ForTypeDefinition, ModifierReviewable.OfAbstraction, ModifierReviewable.OfByteCodeElement, ModifierReviewable.OfEnumeration, NamedElement, TypeDefinition, TypeDescription.Generic
Direct Known Subclasses:
TypeDescription.Generic.LazyProjection.WithEagerNavigation, TypeDescription.Generic.LazyProjection.WithLazyNavigation, TypeDescription.SuperTypeLoading.ClassLoadingTypeProjection
Enclosing interface:
TypeDescription.Generic

public abstract static class TypeDescription.Generic.LazyProjection extends TypeDescription.Generic.AbstractBase
A lazy projection of a generic type. Such projections allow to only read generic type information in case it is required. This is meaningful as the Java virtual needs to process generic type information which requires extra resources. Also, this allows the extraction of non-generic type information even if the generic type information is invalid.
  • Constructor Details

    • LazyProjection

      public LazyProjection()
  • Method Details

    • resolve

      protected abstract TypeDescription.Generic resolve()
      Resolves the actual generic type.
      Returns:
      An actual description of the represented generic type.
    • getSort

      public TypeDefinition.Sort getSort()
      Returns the sort of the generic type this instance represents.
      Returns:
      The sort of the generic type.
    • getDeclaredFields

      public FieldList<FieldDescription.InGenericShape> getDeclaredFields()
      Returns the fields that this type declares. A super type is only defined for non-generic types (TypeDefinition.Sort.NON_GENERIC), parameterized types (TypeDefinition.Sort.PARAMETERIZED) or generic array types (TypeDefinition.Sort.GENERIC_ARRAY) types. Generic array types never define fields and the returned list is always empty for such types.
      Returns:
      The fields that this type declares. A super type is only defined for non-generic types (TypeDefinition.Sort.NON_GENERIC), parameterized types (TypeDefinition.Sort.PARAMETERIZED) or generic array types (TypeDefinition.Sort.GENERIC_ARRAY) types. Generic array types never define methods and the returned list is always empty for such types.
    • getDeclaredMethods

      public MethodList<MethodDescription.InGenericShape> getDeclaredMethods()
      Returns the methods that this type declares.
      Returns:
      The methods that this type declares.
    • getRecordComponents

      Returns the list of record components that are declared by this type. If this type is not a record, the returned list is empty.
      Returns:
      A list of record components that this type declares.
    • getUpperBounds

      public TypeList.Generic getUpperBounds()

      Returns the upper bounds of this type. Any type with a well-defined upper bound is bound by at least one type. If no such type is defined, the bound is implicitly Object.

      Only non-symbolic type variables (TypeDefinition.Sort.VARIABLE, and wildcard types (TypeDefinition.Sort.WILDCARD) have well-defined upper bounds. For other types, an IllegalStateException is thrown.

      Returns:
      The upper bounds of this type.
    • getLowerBounds

      public TypeList.Generic getLowerBounds()

      Returns the lower bounds of this type.

      Only wildcard types (TypeDefinition.Sort.WILDCARD) define a lower bound. For other types, an IllegalStateException is thrown.

      Returns:
      The lower bounds of this type.
    • getComponentType

      public TypeDescription.Generic getComponentType()

      Returns the component type of this type.

      Only non-generic types (TypeDefinition.Sort.NON_GENERIC) and generic array types TypeDefinition.Sort.GENERIC_ARRAY) define a component type. For other types, an IllegalStateException is thrown.

      Returns:
      The component type of this type or null if this type does not represent an array type.
    • getTypeArguments

      public TypeList.Generic getTypeArguments()

      Returns the type arguments of this type.

      Parameters are only well-defined for parameterized types (TypeDefinition.Sort.PARAMETERIZED). For all other types, this method throws an IllegalStateException.

      Returns:
      A list of this type's type parameters.
    • findBindingOf

      public TypeDescription.Generic findBindingOf(TypeDescription.Generic typeVariable)

      Returns the parameter binding of the supplied type variable.

      This method must only be called for parameterized types (TypeDefinition.Sort.PARAMETERIZED). For all other types, this method throws an IllegalStateException.

      Parameters:
      typeVariable - The type variable for which a value should be located.
      Returns:
      The value that is bound to the supplied type variable or null if the type variable is not bound by this parameterized type.
    • getTypeVariableSource

      public TypeVariableSource getTypeVariableSource()
      Returns the source of this type variable. A type variable source is only well-defined for an attached type variable (TypeDefinition.Sort.VARIABLE. For other types, this method throws an IllegalStateException.
      Returns:
      This type's type variable source.
    • getOwnerType

      public TypeDescription.Generic getOwnerType()

      Returns the owner type of this type. A type's owner type describes a nested type's declaring type. If it exists, the returned type can be a non-generic or parameterized type. If a class has no declaring type, null is returned.

      An owner type is only well-defined for parameterized types (TypeDefinition.Sort.PARAMETERIZED), for non-generic types (TypeDefinition.Sort.NON_GENERIC) and for generic arrays (TypeDefinition.Sort.GENERIC_ARRAY). For all other types, this method throws an IllegalStateException.

      Returns:
      This type's owner type or null if no owner type exists.
    • getTypeName

      public String getTypeName()
      Returns the name of the type. For generic types, this name is their Object.toString() representations. For a non-generic type, it is the fully qualified binary name of the type.
      Returns:
      The name of this type.
    • getSymbol

      public String getSymbol()
      Returns the symbol of this type variable. A symbol is only well-defined for type variables (TypeDefinition.Sort.VARIABLE, TypeDefinition.Sort.VARIABLE_SYMBOLIC). For other types, this method throws an IllegalStateException.
      Returns:
      This type's type variable symbol.
    • getActualName

      public String getActualName()
      Returns the display name of this element as it is found in the source code. If no such name exists, an empty string is returned.
      Returns:
      The name of this element as given in a Java program's source code.
    • accept

      public <T> T accept(TypeDescription.Generic.Visitor<T> visitor)
      Applies a visitor to this generic type description.
      Type Parameters:
      T - The value that this visitor yields.
      Parameters:
      visitor - The visitor to apply.
      Returns:
      The visitor's return value.
    • getStackSize

      public StackSize getStackSize()
      Returns the size of the type described by this instance. Wildcard types (TypeDefinition.Sort.WILDCARD do not have a well-defined a stack size and cause an IllegalStateException to be thrown.
      Returns:
      The size of the type described by this instance.
    • isArray

      public boolean isArray()
      Checks if the type described by this entity is an array.
      Returns:
      true if this type description represents an array.
    • isPrimitive

      public boolean isPrimitive()
      Checks if the type described by this entity is a primitive type.
      Returns:
      true if this type description represents a primitive type.
    • isRecord

      public boolean isRecord()
      Checks if this type is a Java record.
      Returns:
      true if this type is a Java record.
    • represents

      public boolean represents(Type type)
      Checks if the type described by this instance represents type.
      Specified by:
      represents in interface TypeDefinition
      Overrides:
      represents in class TypeDescription.Generic.AbstractBase
      Parameters:
      type - The type of interest.
      Returns:
      true if the type described by this instance represents type.
    • hashCode

      @Enhance("hashCode") public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object other)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object