Class JavaConstant.MethodHandle

java.lang.Object
net.bytebuddy.utility.JavaConstant.MethodHandle
All Implemented Interfaces:
ConstantValue, JavaConstant
Enclosing interface:
JavaConstant

public static class JavaConstant.MethodHandle extends Object implements JavaConstant
Represents a java.lang.invoke.MethodHandle object. Note that constant MethodHandles cannot be represented within the constant pool of a Java class and can therefore not be represented as an instance of this representation order.
  • Field Details

  • Constructor Details

    • MethodHandle

      protected MethodHandle(JavaConstant.MethodHandle.HandleType handleType, TypeDescription ownerType, String name, TypeDescription returnType, List<? extends TypeDescription> parameterTypes)
      Creates a method handle representation.
      Parameters:
      handleType - The handle type that is represented by this instance.
      ownerType - The owner type that is represented by this instance.
      name - The name that is represented by this instance.
      returnType - The return type that is represented by this instance.
      parameterTypes - The parameter types that is represented by this instance.
  • 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.
    • ofLoaded

      public static JavaConstant.MethodHandle ofLoaded(Object methodHandle)
      Creates a method handles representation of a loaded method handle which is analyzed using a public MethodHandles.Lookup object. A method handle can only be analyzed on virtual machines that support the corresponding API (Java 7+). For virtual machines before Java 8+, a method handle instance can only be analyzed by taking advantage of private APIs what might require a access context.
      Parameters:
      methodHandle - The loaded method handle to represent.
      Returns:
      A representation of the loaded method handle
    • ofLoaded

      public static JavaConstant.MethodHandle ofLoaded(Object methodHandle, Object lookup)
      Creates a method handles representation of a loaded method handle which is analyzed using the given lookup context. A method handle can only be analyzed on virtual machines that support the corresponding API (Java 7+). For virtual machines before Java 8+, a method handle instance can only be analyzed by taking advantage of private APIs what might require a access context.
      Parameters:
      methodHandle - The loaded method handle to represent.
      lookup - The lookup object to use for analyzing the method handle.
      Returns:
      A representation of the loaded method handle
    • of

      public static JavaConstant.MethodHandle of(Method method)
      Creates a method handle representation of the given method.
      Parameters:
      method - The method ro represent.
      Returns:
      A method handle representing the given method.
    • of

      public static JavaConstant.MethodHandle of(Constructor<?> constructor)
      Creates a method handle representation of the given constructor.
      Parameters:
      constructor - The constructor ro represent.
      Returns:
      A method handle representing the given constructor.
    • of

      public static JavaConstant.MethodHandle of(MethodDescription.InDefinedShape methodDescription)
      Creates a method handle representation of the given method.
      Parameters:
      methodDescription - The method ro represent.
      Returns:
      A method handle representing the given method.
    • ofSpecial

      public static JavaConstant.MethodHandle ofSpecial(Method method, Class<?> type)
      Creates a method handle representation of the given method for an explicit special method invocation of an otherwise virtual method.
      Parameters:
      method - The method ro represent.
      type - The type on which the method is to be invoked on as a special method invocation.
      Returns:
      A method handle representing the given method as special method invocation.
    • ofSpecial

      public static JavaConstant.MethodHandle ofSpecial(MethodDescription.InDefinedShape methodDescription, TypeDescription typeDescription)
      Creates a method handle representation of the given method for an explicit special method invocation of an otherwise virtual method.
      Parameters:
      methodDescription - The method ro represent.
      typeDescription - The type on which the method is to be invoked on as a special method invocation.
      Returns:
      A method handle representing the given method as special method invocation.
    • ofGetter

      public static JavaConstant.MethodHandle ofGetter(Field field)
      Returns a method handle for a setter of the given field.
      Parameters:
      field - The field to represent.
      Returns:
      A method handle for a setter of the given field.
    • ofGetter

      public static JavaConstant.MethodHandle ofGetter(FieldDescription.InDefinedShape fieldDescription)
      Returns a method handle for a setter of the given field.
      Parameters:
      fieldDescription - The field to represent.
      Returns:
      A method handle for a setter of the given field.
    • ofSetter

      public static JavaConstant.MethodHandle ofSetter(Field field)
      Returns a method handle for a getter of the given field.
      Parameters:
      field - The field to represent.
      Returns:
      A method handle for a getter of the given field.
    • ofSetter

      public static JavaConstant.MethodHandle ofSetter(FieldDescription.InDefinedShape fieldDescription)
      Returns a method handle for a getter of the given field.
      Parameters:
      fieldDescription - The field to represent.
      Returns:
      A method handle for a getter of the given field.
    • lookupType

      public static Class<?> lookupType(Object callerClassLookup)
      Returns the lookup type of the provided java.lang.invoke.MethodHandles$Lookup instance.
      Parameters:
      callerClassLookup - An instance of java.lang.invoke.MethodHandles$Lookup.
      Returns:
      The instance's lookup type.
    • toDescription

      public Object toDescription()
      Returns this constant as a Java java.lang.constant.ConstantDesc if the current VM is of at least version 12. If the current VM is of an older version and does not support the type, an exception is thrown.
      Specified by:
      toDescription in interface JavaConstant
      Returns:
      This constant as a Java java.lang.constant.ConstantDesc.
    • accept

      public <T> T accept(JavaConstant.Visitor<T> visitor)
      Applies the supplied visitor to this constant type with its respective callback.
      Specified by:
      accept in interface JavaConstant
      Type Parameters:
      T - The type of the value that is returned by the visitor.
      Parameters:
      visitor - The visitor to dispatch.
      Returns:
      The value that is returned by the supplied visitor.
    • getTypeDescription

      public TypeDescription getTypeDescription()
      Returns a description of the type of this constant.
      Specified by:
      getTypeDescription in interface ConstantValue
      Returns:
      A description of the type of this constant.
    • toStackManipulation

      public StackManipulation toStackManipulation()
      Returns a stack manipulation loading this value.
      Specified by:
      toStackManipulation in interface ConstantValue
      Returns:
      A stack manipulation loading this value.
    • getHandleType

      public JavaConstant.MethodHandle.HandleType getHandleType()
      Returns the handle type represented by this instance.
      Returns:
      The handle type represented by this instance.
    • getOwnerType

      public TypeDescription getOwnerType()
      Returns the owner type of this instance.
      Returns:
      The owner type of this instance.
    • getName

      public String getName()
      Returns the name represented by this instance.
      Returns:
      The name represented by this instance.
    • getReturnType

      public TypeDescription getReturnType()
      Returns the return type represented by this instance.
      Returns:
      The return type represented by this instance.
    • getParameterTypes

      public TypeList getParameterTypes()
      Returns the parameter types represented by this instance.
      Returns:
      The parameter types represented by this instance.
    • getDescriptor

      public String getDescriptor()
      Returns the method descriptor of this method handle representation.
      Returns:
      The method descriptor of this method handle representation.
    • 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