Class TypeDescription.AbstractBase

All Implemented Interfaces:
Iterable<TypeDefinition>, AnnotationSource, ByteCodeElement, DeclaredByType, ModifierReviewable, ModifierReviewable.ForFieldDescription, ModifierReviewable.ForMethodDescription, ModifierReviewable.ForParameterDescription, ModifierReviewable.ForTypeDefinition, ModifierReviewable.OfAbstraction, ModifierReviewable.OfByteCodeElement, ModifierReviewable.OfEnumeration, NamedElement, NamedElement.WithDescriptor, NamedElement.WithRuntimeName, TypeDefinition, TypeDescription, TypeVariableSource
Direct Known Subclasses:
TypeDescription.AbstractBase.OfSimpleType, TypeDescription.ArrayProjection, TypeDescription.ForLoadedType, TypeDescription.SuperTypeLoading
Enclosing interface:
TypeDescription

public abstract static class TypeDescription.AbstractBase extends TypeVariableSource.AbstractBase implements TypeDescription
An abstract base implementation of a type description.
  • Field Details

  • Constructor Details

    • AbstractBase

      public AbstractBase()
  • Method Details

    • doPrivileged

      @Enhance private static <T> T doPrivileged(PrivilegedAction<T> action)
      A proxy for java.security.AccessController#doPrivileged that is activated if available.
      Type Parameters:
      T - The type of the action's resolved value.
      Parameters:
      action - The action to execute from a privileged context.
      Returns:
      The action's resolved value.
    • isAssignable

      private static boolean isAssignable(TypeDescription sourceType, TypeDescription targetType)
      Checks if a specific type is assignable to another type where the source type must be a super type of the target type.
      Parameters:
      sourceType - The source type to which another type is to be assigned to.
      targetType - The target type that is to be assigned to the source type.
      Returns:
      true if the target type is assignable to the source type.
    • isAssignableFrom

      public 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).
      Specified by:
      isAssignableFrom in interface TypeDescription
      Parameters:
      type - The type of interest.
      Returns:
      true if this type is assignable from type.
    • isAssignableFrom

      public 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 TypeDescription.isAssignableFrom(Class)
      Specified by:
      isAssignableFrom in interface TypeDescription
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type is assignable from type.
    • isAssignableTo

      public 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).
      Specified by:
      isAssignableTo in interface TypeDescription
      Parameters:
      type - The type of interest.
      Returns:
      true if this type is assignable to type.
    • isAssignableTo

      public 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 TypeDescription.isAssignableTo(Class)
      Specified by:
      isAssignableTo in interface TypeDescription
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type is assignable to type.
    • isInHierarchyWith

      public 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.
      Specified by:
      isInHierarchyWith in interface TypeDescription
      Parameters:
      type - The type of interest.
      Returns:
      true if this type and the supplied type are in a type hierarchy with each other.
    • isInHierarchyWith

      public 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.
      Specified by:
      isInHierarchyWith in interface TypeDescription
      Parameters:
      typeDescription - The type of interest.
      Returns:
      true if this type and the supplied type are in a type hierarchy with each other.
    • asErasure

      public TypeDescription asErasure()
      Returns the erasure of this type. Wildcard types (TypeDefinition.Sort.WILDCARD) do not have a well-defined erasure and cause an IllegalStateException to be thrown.
      Specified by:
      asErasure in interface TypeDefinition
      Returns:
      The erasure of this type.
    • asGenericType

      public TypeDescription.Generic asGenericType()
      Returns this type definition as a generic type.
      Specified by:
      asGenericType in interface TypeDefinition
      Returns:
      This type definition represented as a generic type.
    • getSort

      public TypeDefinition.Sort getSort()
      Returns the sort of the generic type this instance represents.
      Specified by:
      getSort in interface TypeDefinition
      Returns:
      The sort of the generic type.
    • isInstance

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

      public boolean isAnnotationValue(Object value)
      Checks if instances of this type can be used for describing the given annotation value.
      Specified by:
      isAnnotationValue in interface TypeDescription
      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..
    • getInternalName

      public String getInternalName()
      Returns the internal name of this byte code element. If no well-defined internal name is known for this element, the actual name is returned.
      Specified by:
      getInternalName in interface NamedElement.WithRuntimeName
      Returns:
      The internal name of this byte code element as used within the Java class file format.
    • getActualModifiers

      public 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.
      Specified by:
      getActualModifiers in interface TypeDescription
      Parameters:
      superFlag - true if the modifier's super flag should be set.
      Returns:
      The type's actual modifiers.
    • getGenericSignature

      @MaybeNull public String getGenericSignature()
      Returns the generic signature of this byte code element. If this element does not reference generic types or references malformed generic types, null is returned as a signature.
      Specified by:
      getGenericSignature in interface NamedElement.WithDescriptor
      Returns:
      The generic signature or null if this element is not generic.
    • isSamePackage

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

      public boolean isVisibleTo(TypeDescription typeDescription)

      Checks if this element is visible from a given type. Visibility is a wider criteria then accessibility which can be checked by ByteCodeElement.isAccessibleTo(TypeDescription). Visibility allows the invocation of a method on itself or on external instances.

      Note: A method or field might define a signature that includes types that are not visible to a type. Such methods can be legally invoked from this type and can even be implemented as bridge methods by this type. It is however not legal to declare a method with invisible types in its signature that are not bridges what might require additional validation.

      Important: Virtual byte code elements, i.e. virtual methods, are only considered visible if the type they are invoked upon is visible to a given type. The visibility of such virtual members can therefore not be determined by only investigating the invoked method but requires an additional check of the target type.

      Specified by:
      isVisibleTo in interface ByteCodeElement
      Parameters:
      typeDescription - The type which is checked for its visibility of this element.
      Returns:
      true if this element is visible for typeDescription.
    • isAccessibleTo

      public boolean isAccessibleTo(TypeDescription typeDescription)

      Checks if this element is accessible from a given type. Accessibility is a more narrow criteria then visibility which can be checked by ByteCodeElement.isVisibleTo(TypeDescription). Accessibility allows the invocation of a method on external instances or on itself. Methods that can be invoked from within an instance might however not be considered accessible.

      Note: A method or field might define a signature that includes types that are not visible to a type. Such methods can be legally invoked from this type and can even be implemented as bridge methods by this type. It is however not legal to declare a method with invisible types in its signature that are not bridges what might require additional validation.

      Important: Virtual byte code elements, i.e. virtual methods, are only considered visible if the type they are invoked upon is visible to a given type. The visibility of such virtual members can therefore not be determined by only investigating the invoked method but requires an additional check of the target type.

      Specified by:
      isAccessibleTo in interface ByteCodeElement
      Parameters:
      typeDescription - The type which is checked for its accessibility of this element.
      Returns:
      true if this element is accessible for typeDescription.
    • getInheritedAnnotations

      public AnnotationList getInheritedAnnotations()
      Returns the annotations that this type declares or inherits from super types.
      Specified by:
      getInheritedAnnotations in interface TypeDescription
      Returns:
      A list of all inherited annotations.
    • 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.
      Specified by:
      getActualName in interface NamedElement
      Returns:
      The name of this element as given in a Java program's source code.
    • getLongSimpleName

      public String getLongSimpleName()
      Returns a form of a type's simple name which only shortens the package name but not the names of outer classes.
      Specified by:
      getLongSimpleName in interface TypeDescription
      Returns:
      The long form of the simple name of this type.
    • isPrimitiveWrapper

      public 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.
      Specified by:
      isPrimitiveWrapper in interface TypeDescription
      Returns:
      true if this type represents a wrapper type.
    • isAnnotationReturnType

      public boolean isAnnotationReturnType()
      Checks if instances of this type can be returned from an annotation method.
      Specified by:
      isAnnotationReturnType in interface TypeDescription
      Returns:
      true if instances of this type can be returned from an annotation method.
    • isAnnotationValue

      public boolean isAnnotationValue()
      Checks if instances of this type can be used for describing an annotation value.
      Specified by:
      isAnnotationValue in interface TypeDescription
      Returns:
      true if instances of this type can be used for describing an annotation value.
    • represents

      public boolean represents(Type type)
      Checks if the type described by this instance represents type.
      Specified by:
      represents in interface TypeDefinition
      Parameters:
      type - The type of interest.
      Returns:
      true if the type described by this instance represents type.
    • 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.
      Specified by:
      getTypeName in interface TypeDefinition
      Returns:
      The name of this type.
    • getEnclosingSource

      @MaybeNull public TypeVariableSource getEnclosingSource()
      Returns the enclosing source of type variables that are valid in the scope of this type variable source.
      Specified by:
      getEnclosingSource in interface TypeVariableSource
      Returns:
      The enclosing source or null if no such source exists.
    • isInferrable

      public boolean isInferrable()
      Returns true if type variables declared by this type variable source allow dynamic type inference.
      Specified by:
      isInferrable in interface TypeVariableSource
      Returns:
      true if type variables declared by this type variable source allow dynamic type inference.
    • accept

      public <T> T accept(TypeVariableSource.Visitor<T> visitor)
      Applies a visitor on this type variable source.
      Specified by:
      accept in interface TypeVariableSource
      Type Parameters:
      T - The visitor's return type.
      Parameters:
      visitor - The visitor to apply.
      Returns:
      The visitor's return value.
    • isPackageType

      public boolean isPackageType()
      Checks if this type represents a class that is a place holder for a package description.
      Specified by:
      isPackageType in interface TypeDescription
      Returns:
      true if this type represents a package description.
    • isGenerified

      public boolean isGenerified()
      Checks if this type variable source has a generic declaration. This means:
      • A type declares type variables or is an inner class of a type with a generic declaration.
      • A method declares at least one type variable.
      Specified by:
      isGenerified in interface TypeVariableSource
      Returns:
      true if this type code element has a generic declaration.
    • getInnerClassCount

      public 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.
      Specified by:
      getInnerClassCount in interface TypeDescription
      Returns:
      The number of outer classes relatively to this type.
    • isInnerClass

      public boolean isInnerClass()
      Indicates if this class is an inner class.
      Specified by:
      isInnerClass in interface TypeDescription
      Returns:
      true if this class is an inner class.
    • isNestedClass

      public boolean isNestedClass()
      Indicates if this class is a nested class.
      Specified by:
      isNestedClass in interface TypeDescription
      Returns:
      true if this class is a nested class.
    • asBoxed

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

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

      @MaybeNull public 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.
      Specified by:
      getDefaultValue in interface TypeDescription
      Returns:
      This types default value.
    • isNestHost

      public boolean isNestHost()
      Checks if this class is the host of a nest group.
      Specified by:
      isNestHost in interface TypeDescription
      Returns:
      true if this class is a nest group's host.
    • isNestMateOf

      public boolean isNestMateOf(Class<?> type)
      Checks if this type and the supplied type are members of the same nest group.
      Specified by:
      isNestMateOf in interface TypeDescription
      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

      public boolean isNestMateOf(TypeDescription typeDescription)
      Checks if this type and the supplied type are members of the same nest group.
      Specified by:
      isNestMateOf in interface TypeDescription
      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.
    • isMemberType

      public boolean isMemberType()
      Checks if this type description represents a member type.
      Specified by:
      isMemberType in interface TypeDescription
      Returns:
      true if this type description represents a member type.
    • isCompileTimeConstant

      public 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.
      Specified by:
      isCompileTimeConstant in interface TypeDescription
      Returns:
      true if this type represents a compile-time constant.
    • isSealed

      public boolean isSealed()
      Returns true if this class is a sealed class that only permitts a specified range of subclasses.
      Specified by:
      isSealed in interface TypeDescription
      Returns:
      true if this class is a sealed class that only permitts a specified range of subclasses.
    • getClassFileVersion

      @MaybeNull public 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.
      Specified by:
      getClassFileVersion in interface TypeDescription
      Returns:
      This type's class file version or null if it cannot be resolved.
    • iterator

      public Iterator<TypeDefinition> iterator()
      Specified by:
      iterator in interface Iterable<TypeDefinition>
    • hashCode

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

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

      public String toString()
      Overrides:
      toString in class Object