Interface TypeDescription

All Superinterfaces:
AnnotationSource, ByteCodeElement, DeclaredByType, Iterable<TypeDefinition>, ModifierReviewable, ModifierReviewable.ForTypeDefinition, ModifierReviewable.OfAbstraction, ModifierReviewable.OfByteCodeElement, ModifierReviewable.OfEnumeration, NamedElement, NamedElement.WithDescriptor, NamedElement.WithRuntimeName, TypeDefinition, TypeVariableSource
All Known Subinterfaces:
InstrumentedType, InstrumentedType.WithFlexibleName
All Known Implementing Classes:
InstrumentedType.Default, InstrumentedType.Frozen, JavaType.LatentTypeWithSimpleName, TypeDescription.AbstractBase, TypeDescription.AbstractBase.OfSimpleType, TypeDescription.AbstractBase.OfSimpleType.WithDelegation, TypeDescription.ArrayProjection, TypeDescription.ForLoadedType, TypeDescription.ForPackageDescription, TypeDescription.Latent, TypeDescription.SuperTypeLoading, TypePool.Default.LazyTypeDescription, TypePool.Default.WithLazyResolution.LazyTypeDescription, TypePool.LazyFacade.LazyTypeDescription

public interface TypeDescription extends TypeDefinition, ByteCodeElement, TypeVariableSource
Implementations of this interface represent a Java type, i.e. a class or interface. Instances of this interface always represent non-generic types of sort TypeDefinition.Sort.NON_GENERIC.
  • Field Details

  • Method Details

    • 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.
      Specified by:
      getDeclaredFields in interface TypeDefinition
      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

      Returns the methods that this type declares.
      Specified by:
      getDeclaredMethods in interface TypeDefinition
      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.
      Specified by:
      getRecordComponents in interface TypeDefinition
      Returns:
      A list of record components that this type declares.
    • isInstance

      boolean isInstance(Object value)
      Checks if value is an instance of the type represented by this instance.
      Parameters:
      value - The object of interest.
      Returns:
      true if the object is an instance of the type described by this instance.
    • isAssignableFrom

      boolean isAssignableFrom(Class<?> type)
      Checks if this type is assignable from the type described by this instance, for example for class Foo and class Bar extends Foo, this method would return true for Foo.class.isAssignableFrom(Bar.class).
      Parameters:
      type - The type of interest.
      Returns:
      true if this type is assignable from type.
    • isAssignableFrom

      boolean isAssignableFrom(TypeDescription typeDescription)
      Checks if this type is assignable from the type described by this instance, for example for class Foo and class Bar extends Foo, this method would return true for Foo.class.isAssignableFrom(Bar.class).

       

      Implementations of this methods are allowed to delegate to isAssignableFrom(Class)
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type is assignable from type.
    • isAssignableTo

      boolean isAssignableTo(Class<?> type)
      Checks if this type is assignable from the type described by this instance, for example for class Foo and class Bar extends Foo, this method would return true for Bar.class.isAssignableTo(Foo.class).
      Parameters:
      type - The type of interest.
      Returns:
      true if this type is assignable to type.
    • isAssignableTo

      boolean isAssignableTo(TypeDescription typeDescription)
      Checks if this type is assignable from the type described by this instance, for example for class Foo and class Bar extends Foo, this method would return true for Bar.class.isAssignableFrom(Foo.class).

       

      Implementations of this methods are allowed to delegate to isAssignableTo(Class)
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type is assignable to type.
    • isInHierarchyWith

      boolean isInHierarchyWith(Class<?> type)
      Returns true if this type and the supplied type are in a type hierarchy with each other, i.e. if this type is assignable to the supplied type or the other way around.
      Parameters:
      type - The type of interest.
      Returns:
      true if this type and the supplied type are in a type hierarchy with each other.
    • isInHierarchyWith

      boolean isInHierarchyWith(TypeDescription typeDescription)
      Returns true if this type and the supplied type are in a type hierarchy with each other, i.e. if this type is assignable to the supplied type or the other way around.
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type and the supplied type are in a type hierarchy with each other.
    • getComponentType

      @MaybeNull TypeDescription 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.

      Specified by:
      getComponentType in interface TypeDefinition
      Returns:
      The component type of this type or null if this type does not represent an array type.
    • getDeclaringType

      @MaybeNull TypeDescription getDeclaringType()
      Returns the declaring type of this instance.
      Specified by:
      getDeclaringType in interface DeclaredByType
      Returns:
      The declaring type or null if no such type exists.
    • getDeclaredTypes

      TypeList getDeclaredTypes()
      Returns a list of types that are declared by this type. This list does not normally include anonymous types but might include additional types if they are explicitly added to an instrumented type.
      Returns:
      A list of types that are declared within this type.
    • getEnclosingMethod

      Returns a description of the method that encloses this type. If this method is not enclosed by any type or is enclosed by the type initializer, null is returned by this method.
      Returns:
      A description of the enclosing method of this type or null if there is no such method.
    • getEnclosingType

      @MaybeNull TypeDescription getEnclosingType()
      Returns a description of this type's enclosing type if any.
      Returns:
      A description of the enclosing type of this type or null if there is no such type.
    • getActualModifiers

      int getActualModifiers(boolean superFlag)
      Returns the type's actual modifiers as present in the class file. For example, a type cannot be private. but it modifiers might reflect this property nevertheless if a class was defined as a private inner class. The returned modifiers take also into account if the type is marked as Deprecated. Anonymous classes that are enclosed in a static method or the type initializer are additionally marked as final as it is also done by the Java compiler.
      Parameters:
      superFlag - true if the modifier's super flag should be set.
      Returns:
      The type's actual modifiers.
    • getSimpleName

      String getSimpleName()
      Returns the simple name of this type.
      Returns:
      The simple name of this type.
    • getLongSimpleName

      String getLongSimpleName()
      Returns a form of a type's simple name which only shortens the package name but not the names of outer classes.
      Returns:
      The long form of the simple name of this type.
    • getCanonicalName

      @MaybeNull String getCanonicalName()
      Returns the canonical name of this type if it exists.
      Returns:
      The canonical name of this type. Might be null.
    • isAnonymousType

      boolean isAnonymousType()
      Checks if this type description represents an anonymous type.
      Returns:
      true if this type description represents an anonymous type.
    • isLocalType

      boolean isLocalType()
      Checks if this type description represents a local type.
      Returns:
      true if this type description represents a local type.
    • isMemberType

      boolean isMemberType()
      Checks if this type description represents a member type.
      Returns:
      true if this type description represents a member type.
    • getPackage

      Returns the package of the type described by this instance or null if the described type is a primitive type or an array.
      Returns:
      The package of the type described by this instance or null if the described type is a primitive type or an array.
    • getInheritedAnnotations

      AnnotationList getInheritedAnnotations()
      Returns the annotations that this type declares or inherits from super types.
      Returns:
      A list of all inherited annotations.
    • isSamePackage

      boolean isSamePackage(TypeDescription typeDescription)
      Checks if two types are defined in the same package.
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type and the given type are in the same package.
    • isPrimitiveWrapper

      boolean isPrimitiveWrapper()
      Checks if this type represents a wrapper type for a primitive type. The Void type is not considered to be a wrapper type.
      Returns:
      true if this type represents a wrapper type.
    • isAnnotationReturnType

      boolean isAnnotationReturnType()
      Checks if instances of this type can be returned from an annotation method.
      Returns:
      true if instances of this type can be returned from an annotation method.
    • isAnnotationValue

      boolean isAnnotationValue()
      Checks if instances of this type can be used for describing an annotation value.
      Returns:
      true if instances of this type can be used for describing an annotation value.
    • isAnnotationValue

      boolean isAnnotationValue(Object value)
      Checks if instances of this type can be used for describing the given annotation value.
      Parameters:
      value - The value that is supposed to describe the annotation value for this instance.
      Returns:
      true if instances of this type can be used for describing the given annotation value..
    • isPackageType

      boolean isPackageType()
      Checks if this type represents a class that is a place holder for a package description.
      Returns:
      true if this type represents a package description.
    • getInnerClassCount

      int getInnerClassCount()
      Returns the amount of outer classes this type defines. If this type is not an inner type of another class, 0 is returned.
      Returns:
      The number of outer classes relatively to this type.
    • isInnerClass

      boolean isInnerClass()
      Indicates if this class is an inner class.
      Returns:
      true if this class is an inner class.
    • isNestedClass

      boolean isNestedClass()
      Indicates if this class is a nested class.
      Returns:
      true if this class is a nested class.
    • asBoxed

      TypeDescription asBoxed()
      Returns a description of this type that represents this type as a boxed type for primitive types, unless its void.
      Returns:
      A description of this type in its boxed form.
    • asUnboxed

      TypeDescription asUnboxed()
      Returns a description of this type that represents this type as an unboxed type for boxing types, unless its Void.
      Returns:
      A description of this type in its unboxed form.
    • getDefaultValue

      @MaybeNull Object getDefaultValue()
      Returns the default value for this type, i.e. the zero value for a primitive type and null for a reference type. For void, null is returned.
      Returns:
      This types default value.
    • getNestHost

      TypeDescription getNestHost()
      Returns the nest host of this type. For types prior to Java 11, this type is returned which is the default nest host.
      Returns:
      The nest host of this type.
    • getNestMembers

      TypeList getNestMembers()
      Returns a list of members that are part of a nesting group. Prior to Java 11, a list that only contains this type is returned which is the default nest group.
      Returns:
      A list of members of this nest group.
    • isNestHost

      boolean isNestHost()
      Checks if this class is the host of a nest group.
      Returns:
      true if this class is a nest group's host.
    • isNestMateOf

      boolean isNestMateOf(Class<?> type)
      Checks if this type and the supplied type are members of the same nest group.
      Parameters:
      type - The type for which to check if it is a member of the same nest group.
      Returns:
      true if this type and the supplied type are members of the same nest group.
    • isNestMateOf

      boolean isNestMateOf(TypeDescription typeDescription)
      Checks if this type and the supplied type are members of the same nest group.
      Parameters:
      typeDescription - The type for which to check if it is a member of the same nest group.
      Returns:
      true if this type and the supplied type are members of the same nest group.
    • isCompileTimeConstant

      boolean isCompileTimeConstant()
      Indicates if this type represents a compile-time constant, i.e. int, long, float, double, String, Class or java.lang.invoke.MethodHandle or java.lang.invoke.MethodType. Since Java 11's *constantdynamic* any type can be considered a constant value; this method does however only consider classical compile time constants.
      Returns:
      true if this type represents a compile-time constant.
    • getPermittedSubtypes

      TypeList getPermittedSubtypes()
      Returns the list of permitted direct subclasses if this class is a sealed class. Permitted subclasses might or might not be resolvable, where unresolvable subclasses might also be missing from the list. For returned types, methods that return the class's name will always be invokable without errors. If this type is not sealed, an empty list is returned. Note that an empty list might also be returned for a sealed type, if no type permitted subtype is resolvable.
      Returns:
      The list of permitted subtypes or an empty list if this type is not sealed.
    • isSealed

      boolean isSealed()
      Returns true if this class is a sealed class that only permitts a specified range of subclasses.
      Returns:
      true if this class is a sealed class that only permitts a specified range of subclasses.
    • getClassFileVersion

      @MaybeNull ClassFileVersion getClassFileVersion()
      Attempts to resolve the class file version of this type. If this description is not based on a class file or if the class file version cannot be resolved, null is returned.
      Returns:
      This type's class file version or null if it cannot be resolved.