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

Author:
  Jochen "blackdrag" Theodorou

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static enum`
`IndyInterface.CALL_TYPES`
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 for example 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 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.

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

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