Package org.codehaus.groovy.vmplugin.v8

## Class IndyInterface

- java.lang.Object
- - 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
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `IndyInterface.CallType` | Enum for easy differentiation between call types

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `GROOVY_OBJECT` | flags for method and property calls
    `static int` | `IMPLICIT_THIS` | flags for method and property calls
    `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 for example unreflect calls
    `static int` | `SAFE_NAVIGATION` | flags for method and property calls
    `static int` | `SPREAD_CALL` | flags for method and property calls
    `protected static SwitchPoint` | `switchPoint` |
    `static int` | `THIS_CALL` | flags for method and property calls
    `static int` | `UNCACHED_CALL` | flags for method and property calls

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `IndyInterface()` |

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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.
    `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.
    `protected static void` | `invalidateSwitchPoints()` | Callback for constant meta class 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
    `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.
    `static CallSite` | `staticArrayAccess​(MethodHandles.Lookup lookup, String name, MethodType type)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SAFE_NAVIGATION

          public static final int SAFE_NAVIGATION

      flags for method and property calls
      See Also:
        Constant Field Values

    - #### THIS_CALL

          public static final int THIS_CALL

      flags for method and property calls
      See Also:
        Constant Field Values

    - #### GROOVY_OBJECT

          public static final int GROOVY_OBJECT

      flags for method and property calls
      See Also:
        Constant Field Values

    - #### IMPLICIT_THIS

          public static final int IMPLICIT_THIS

      flags for method and property calls
      See Also:
        Constant Field Values

    - #### SPREAD_CALL

          public static final int SPREAD_CALL

      flags for method and property calls
      See Also:
        Constant Field Values

    - #### UNCACHED_CALL

          public static final int UNCACHED_CALL

      flags for method and property calls
      See Also:
        Constant Field Values

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

    - #### IndyInterface

          public IndyInterface()

  - ### Method Detail

    - #### 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:
      - 1 is the flag value for safe navigation see `SAFE_NAVIGATION`
      - 2 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

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

    - #### fromCache

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

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

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

    - #### staticArrayAccess

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

      Since:
        2.5.0