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 enum`
  `IndyInterface.CallType`
  Enum for easy differentiation between call types

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `GROOVY_OBJECT`
  flags for method and property calls
  `static final int`
  `IMPLICIT_THIS`
  flags for method and property calls
  `protected static final Logger`
  `LOG`
  Logger
  `protected static final boolean`
  `LOG_ENABLED`
  boolean to indicate if logging for indy is enabled
  `static final MethodHandles.Lookup`
  `LOOKUP`
  LOOKUP constant used for example in unreflect calls
  `static final int`
  `SAFE_NAVIGATION`
  flags for method and property calls
  `static final int`
  `SPREAD_CALL`
  flags for method and property calls
  `protected static SwitchPoint`
  `switchPoint`
  `static final int`
  `THIS_CALL`
  flags for method and property calls
  `static final int`
  `UNCACHED_CALL`
  flags for method and property calls

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IndyInterface()`

- ## Method Summary

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

  - ### 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 example in unreflect calls

  - ### switchPoint

    protected static SwitchPoint switchPoint

- ## Constructor Details

  - ### IndyInterface

    public IndyInterface()

- ## Method Details

  - ### invalidateSwitchPoints

    protected static void invalidateSwitchPoints()
    Callback for constant metaclass 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