Class BootstrapMethodHandleResolver

java.lang.Object
sootup.callgraph.invokedynamic.BootstrapMethodHandleResolver
All Implemented Interfaces:
DynamicInvokeResolver

public final class BootstrapMethodHandleResolver extends Object implements DynamicInvokeResolver
Resolves an invokedynamic call site to every method referenced by a MethodHandle among its bootstrap arguments. For LambdaMetafactory call sites that is the lambda body or method reference, marked as DynamicInvokeTarget.lambdaImplementation() so pointer analyses can bind captured values. Other bootstraps (e.g. ObjectMethods for records) contribute their method handles as plain targets.
  • Method Details

    • resolve

      public @NonNull List<DynamicInvokeTarget> resolve(@NonNull JDynamicInvokeExpr expr)
      Specified by:
      resolve in interface DynamicInvokeResolver
      Parameters:
      expr - the invokedynamic expression
      Returns:
      the methods expr may transfer control to; empty if unresolved
    • isLambdaMetafactory

      public static boolean isLambdaMetafactory(@NonNull JDynamicInvokeExpr expr)
      Whether expr is bootstrapped by LambdaMetafactory.(alt)metafactory.
    • lambdaImplementationHandle

      public static @Nullable MethodHandle lambdaImplementationHandle(@NonNull JDynamicInvokeExpr expr)
      The implementation method handle of a LambdaMetafactory call site - its first MethodHandle bootstrap argument - or null if expr is not one.