Package: org.codehaus.groovy.vmplugin.v8

## [Java] Class IndyInterface

- org.codehaus.groovy.vmplugin.v8.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.

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `enum` | `IndyInterface.CallType` | Enum for easy differentiation between call types

  - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `protected static Logger` | `LOG` | Logger
    `protected static boolean` | `LOG_ENABLED` | boolean to indicate if logging for indy is enabled
    `static MethodHandles.Lookup` | `LOOKUP` | LOOKUP constant used for example in unreflect calls
    `static int` | `SAFE_NAVIGATION` | flags for method and property calls
    `protected static SwitchPoint` | `switchPoint` |

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `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.
    `` | `public static Object` | `fromCache(MutableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)` Get the cached methodhandle. if the related methodhandle is not found in the inline cache, cache and return it.
    `` | `protected static void` | `invalidateSwitchPoints()` Callback for constant metaclass update change
    `` | `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
    `` | `public static Object` | `selectMethod(MutableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)` Core method for indy method selection using runtime types.
    `` | `public static CallSite` | `staticArrayAccess(MethodHandles.Lookup lookup, String name, MethodType type)` Since: 2.5.0

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Field Detail

    - #### protected static final Logger LOG

      Logger

    - #### protected static final boolean LOG_ENABLED

      boolean to indicate if logging for indy is enabled

    - #### public static final MethodHandles.Lookup LOOKUP

      LOOKUP constant used for example in unreflect calls

    - #### public static final int SAFE_NAVIGATION

      flags for method and property calls

    - #### protected static SwitchPoint switchPoint

  - ### Method Detail

    - #### 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:

      - {
        value:
          #SAFE_NAVIGATION} is the flag value for safe navigation see SAFE_NAVIGATION
      - {@value #THIS_CALL} is the flag value for a call on this see THIS_CALL
      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

    - #### public static Object fromCache(MutableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)

      Get the cached methodhandle. if the related methodhandle is not found in the inline cache, cache and return it.

    - #### protected static void invalidateSwitchPoints()

      Callback for constant metaclass update change

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

    - #### public static Object selectMethod(MutableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)

      Core method for indy method selection using runtime types.

    - #### public static CallSite staticArrayAccess(MethodHandles.Lookup lookup, String name, MethodType type)

      Since:
        2.5.0