org.codehaus.groovy.vmplugin.v7

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

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `IndyInterface.CALL_TYPES` Enum for easy differentiation between call types

  - ### Field Summary

    Fields
    Modifier and Type | Field and 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 and Description
    `IndyInterface()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `static CallSite` | `bootstrap(MethodHandles.Lookup caller, String name, MethodType type)` Deprecated. since Groovy 2.1.0
    `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 CallSite` | `bootstrapCurrent(MethodHandles.Lookup caller, String name, MethodType type)` Deprecated. since Groovy 2.1.0
    `static CallSite` | `bootstrapCurrentSafe(MethodHandles.Lookup caller, String name, MethodType type)` Deprecated. since Groovy 2.1.0
    `static CallSite` | `bootstrapSafe(MethodHandles.Lookup caller, String name, MethodType type)` Deprecated. since Groovy 2.1.0
    `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

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

    - #### staticArrayAccess

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

      Since:
        2.5.0