Interface ByteCodeElement

All Superinterfaces:
AnnotationSource, DeclaredByType, ModifierReviewable, ModifierReviewable.OfByteCodeElement, NamedElement, NamedElement.WithDescriptor, NamedElement.WithRuntimeName
All Known Subinterfaces:
ByteCodeElement.Member, FieldDescription, FieldDescription.InDefinedShape, FieldDescription.InGenericShape, InstrumentedType, InstrumentedType.WithFlexibleName, MethodDescription, MethodDescription.InDefinedShape, MethodDescription.InGenericShape, TypeDescription
All Known Implementing Classes:
FieldDescription.AbstractBase, FieldDescription.ForLoadedField, FieldDescription.InDefinedShape.AbstractBase, FieldDescription.Latent, FieldDescription.TypeSubstituting, Implementation.Context.Default.AbstractPropertyAccessorMethod, Implementation.Context.Default.AccessorMethod, Implementation.Context.Default.CacheValueField, Implementation.Context.Default.FieldGetter, Implementation.Context.Default.FieldSetter, InstrumentedType.Default, InstrumentedType.Frozen, JavaType.LatentTypeWithSimpleName, MethodDescription.AbstractBase, MethodDescription.ForLoadedConstructor, MethodDescription.ForLoadedMethod, MethodDescription.InDefinedShape.AbstractBase, MethodDescription.InDefinedShape.AbstractBase.ForLoadedExecutable, MethodDescription.Latent, MethodDescription.Latent.TypeInitializer, MethodDescription.TypeSubstituting, MethodRebaseResolver.Resolution.ForRebasedConstructor.RebasedConstructor, MethodRebaseResolver.Resolution.ForRebasedMethod.RebasedMethod, Transformer.ForField.TransformedField, Transformer.ForMethod.TransformedMethod, TypeDescription.AbstractBase, TypeDescription.AbstractBase.OfSimpleType, TypeDescription.AbstractBase.OfSimpleType.WithDelegation, TypeDescription.ArrayProjection, TypeDescription.ForLoadedType, TypeDescription.ForPackageDescription, TypeDescription.Latent, TypeDescription.SuperTypeLoading, TypePool.Default.LazyTypeDescription, TypePool.Default.LazyTypeDescription.LazyFieldDescription, TypePool.Default.LazyTypeDescription.LazyMethodDescription, TypePool.Default.WithLazyResolution.LazyTypeDescription, TypePool.LazyFacade.LazyTypeDescription, TypeWriter.MethodPool.Record.AccessBridgeWrapper.AccessorBridge, TypeWriter.MethodPool.Record.AccessBridgeWrapper.BridgeTarget, TypeWriter.MethodPool.Record.ForDefinedMethod.OfVisibilityBridge.VisibilityBridge

Implementations describe an element represented in byte code, i.e. a type, a field or a method or a constructor.
  • Method Details

    • isVisibleTo

      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 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.

      Parameters:
      typeDescription - The type which is checked for its visibility of this element.
      Returns:
      true if this element is visible for typeDescription.
    • isAccessibleTo

      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 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.

      Parameters:
      typeDescription - The type which is checked for its accessibility of this element.
      Returns:
      true if this element is accessible for typeDescription.