Class IndyInterface

java.lang.Object
org.codehaus.groovy.vmplugin.v7.IndyInterface

public class IndyInterface extends Object
Bytecode level interface for bootstrap methods used by invokedynamic. This class provides a logging ability by using the boolean system property groovy.indy.logging. Other than that this class contains the interfacing methods with bytecode for invokedynamic as well as some helper methods and classes.
Author:
Jochen "blackdrag" Theodorou
  • Field Details

    • SAFE_NAVIGATION

      public static final int SAFE_NAVIGATION
      flags for method and property calls
      See Also:
    • THIS_CALL

      public static final int THIS_CALL
      flags for method and property calls
      See Also:
    • GROOVY_OBJECT

      public static final int GROOVY_OBJECT
      flags for method and property calls
      See Also:
    • IMPLICIT_THIS

      public static final int IMPLICIT_THIS
      flags for method and property calls
      See Also:
    • SPREAD_CALL

      public static final int SPREAD_CALL
      flags for method and property calls
      See Also:
    • UNCACHED_CALL

      public static final int UNCACHED_CALL
      flags for method and property calls
      See Also:
    • LOG

      protected static final Logger LOG
      Logger
    • LOG_ENABLED

      protected static final boolean LOG_ENABLED
      boolean to indicate if logging for indy is enabled
    • LOOKUP

      public static final MethodHandles.Lookup LOOKUP
      LOOKUP constant used for for example unreflect calls
    • switchPoint

      protected static SwitchPoint switchPoint
  • Constructor Details

    • IndyInterface

      public IndyInterface()
  • Method Details

    • invalidateSwitchPoints

      protected static void invalidateSwitchPoints()
      Callback for constant meta class update change
    • bootstrap

      public static CallSite bootstrap(MethodHandles.Lookup caller, String callType, MethodType type, String name, int flags)
      bootstrap method for method calls from Groovy compiled code with indy enabled. This method gets a flags parameter which uses the following encoding:
      Parameters:
      caller - - the caller
      callType - - the type of the call
      type - - the call site type
      name - - the real method name
      flags - - call flags
      Returns:
      the produced CallSite
      Since:
      Groovy 2.1.0
    • bootstrapCurrent

      @Deprecated public static CallSite bootstrapCurrent(MethodHandles.Lookup caller, String name, MethodType type)
      Deprecated.
      since Groovy 2.1.0
      bootstrap method for method calls with "this" as receiver
    • bootstrapCurrentSafe

      @Deprecated public static CallSite bootstrapCurrentSafe(MethodHandles.Lookup caller, String name, MethodType type)
      Deprecated.
      since Groovy 2.1.0
      bootstrap method for method calls with "this" as receiver safe
    • bootstrap

      @Deprecated public static CallSite bootstrap(MethodHandles.Lookup caller, String name, MethodType type)
      Deprecated.
      since Groovy 2.1.0
      bootstrap method for standard method calls
    • bootstrapSafe

      @Deprecated public static CallSite bootstrapSafe(MethodHandles.Lookup caller, String name, MethodType type)
      Deprecated.
      since Groovy 2.1.0
      bootstrap method for null safe standard method calls
    • makeFallBack

      protected static MethodHandle makeFallBack(MutableCallSite mc, Class<?> sender, String name, int callID, MethodType type, boolean safeNavigation, boolean thisCall, boolean spreadCall)
      Makes a fallback method for an invalidated method selection
    • selectMethod

      public static Object selectMethod(MutableCallSite callSite, Class sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable
      Core method for indy method selection using runtime types.
      Throws:
      Throwable