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.
  • Field Details

    • SAFE_NAVIGATION

      public static final int SAFE_NAVIGATION
      Flags for method and property calls.
      See Also:
    • THIS_CALL

      public static final int THIS_CALL
      Flags for method and property calls.
      See Also:
    • GROOVY_OBJECT

      public static final int GROOVY_OBJECT
      Flags for method and property calls.
      See Also:
    • IMPLICIT_THIS

      public static final int IMPLICIT_THIS
      Flags for method and property calls.
      See Also:
    • SPREAD_CALL

      public static final int SPREAD_CALL
      Flags for method and property calls.
      See Also:
    • UNCACHED_CALL

      public static final int UNCACHED_CALL
      Flags for method and property calls.
      See Also:
    • LOG

      protected static final Logger LOG
      Logger.
    • LOG_ENABLED

      protected static final boolean LOG_ENABLED
      Indicates if indy logging 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.
      Parameters:
      caller - - the caller
      callType - - the type of call
      type - - the parameter(s) and return type specification
      name - - the real method name
      flags - - call flags
      Since:
      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

      @Deprecated public static Object fromCache(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable
      Deprecated.
      Use the new bootHandle-based approach instead.
      Get the cached methodHandle. if the related methodHandle is not found in the inline cache, cache and return it.
      Throws:
      Throwable
    • selectMethod

      @Deprecated public static Object selectMethod(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable
      Deprecated.
      Use the new bootHandle-based approach instead.
      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