Package org.codehaus.groovy.vmplugin.v8

# Class Java8

java.lang.Object
org.codehaus.groovy.vmplugin.v8.Java8

All Implemented Interfaces:
  `VMPlugin`

Direct Known Subclasses:
  `Java9`

public class Java8 extends Object implements VMPlugin
Java 8 based functions.

Since:
  2.5.0

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final Map<ElementType,Integer>`
  `elementTypeToTarget`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Java8()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `checkAccessible(Class<?> callerClass, Class<?> declaringClass, int memberModifiers, boolean allowIllegalAccess)`
  check whether the member can be accessed or not
  `boolean`
  `checkCanSetAccessible(AccessibleObject accessibleObject, Class<?> callerClass)`
  The following scenarios can not set accessible, i.e.
  `void`
  `configureAnnotation(AnnotationNode node)`
  `void`
  `configureAnnotationNodeFromDefinition(AnnotationNode definition, AnnotationNode root)`
  `void`
  `configureClassNode(CompileUnit compileUnit, ClassNode classNode)`
  `static GenericsType`
  `configureTypeVariableDefinition(ClassNode base, ClassNode[] bounds)`
  `static ClassNode`
  `configureTypeVariableReference(String name)`
  `<T> T`
  `doPrivileged(PrivilegedAction<T> action)`
  Deprecated.
  `<T> T`
  `doPrivileged(PrivilegedExceptionAction<T> action)`
  Deprecated.
  `protected void`
  `fillParameterNames(String[] names, Member member)`
  `Object`
  `getInvokeSpecialHandle(Method method, Object receiver)`
  Returns a handle with bound receiver to invokeSpecial the given method.
  `Class<?>[]`
  `getPluginDefaultGroovyMethods()`
  `Class<?>[]`
  `getPluginStaticGroovyMethods()`
  `int`
  `getVersion()`
  Gives the version the plugin is made for
  `void`
  `invalidateCallSites()`
  `Object`
  `invokeHandle(Object handle, Object[] arguments)`
  Invokes a handle produced by #getInvokeSpecialdHandle
  `protected ClassNode`
  `makeClassNode(CompileUnit cu, Type t, Class<?> c)`
  `protected void`
  `makeRecordComponents(CompileUnit cu, ClassNode classNode, Class<?> clazz)`
  `protected MethodHandles.Lookup`
  `newLookup(Class<?> targetClass)`
  `static MethodHandles.Lookup`
  `of(Class<?> targetClass)`
  Deprecated.
  `void`
  `setAdditionalClassInformation(ClassNode cn)`
  `protected AnnotationNode`
  `toAnnotationNode(Annotation annotation)`
  `MetaMethod`
  `transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod)`
  transform meta method.
  `MetaMethod`
  `transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?> caller)`
  transform meta method
  `boolean`
  `trySetAccessible(AccessibleObject ao)`
  Set the `accessible` flag for this reflected object to `true` if possible.

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

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

  ### Methods inherited from interface org.codehaus.groovy.vmplugin.VMPlugin

  `getDefaultImportClasses, getRecordComponentNames`

- ## Field Details

  - ### elementTypeToTarget

    protected final Map<ElementType,Integer> elementTypeToTarget

- ## Constructor Details

  - ### Java8

    public Java8()

- ## Method Details

  - ### configureTypeVariableDefinition

    public static GenericsType configureTypeVariableDefinition(ClassNode base, ClassNode[] bounds)

  - ### configureTypeVariableReference

    public static ClassNode configureTypeVariableReference(String name)

  - ### getPluginDefaultGroovyMethods

    public Class<?>[] getPluginDefaultGroovyMethods()
    Specified by:
      `getPluginDefaultGroovyMethods` in interface `VMPlugin`

  - ### getPluginStaticGroovyMethods

    public Class<?>[] getPluginStaticGroovyMethods()
    Specified by:
      `getPluginStaticGroovyMethods` in interface `VMPlugin`

  - ### getVersion

    public int getVersion()
    Description copied from interface: `VMPlugin`
    Gives the version the plugin is made for
    Specified by:
      `getVersion` in interface `VMPlugin`
    Returns:
      7 for jdk7, 8 for jdk8, 9 for jdk9 or higher

  - ### setAdditionalClassInformation

    public void setAdditionalClassInformation(ClassNode cn)
    Specified by:
      `setAdditionalClassInformation` in interface `VMPlugin`

  - ### configureAnnotation

    public void configureAnnotation(AnnotationNode node)
    Specified by:
      `configureAnnotation` in interface `VMPlugin`

  - ### toAnnotationNode

    protected AnnotationNode toAnnotationNode(Annotation annotation)

  - ### configureAnnotationNodeFromDefinition

    public void configureAnnotationNodeFromDefinition(AnnotationNode definition, AnnotationNode root)
    Specified by:
      `configureAnnotationNodeFromDefinition` in interface `VMPlugin`

  - ### configureClassNode

    public void configureClassNode(CompileUnit compileUnit, ClassNode classNode)
    Specified by:
      `configureClassNode` in interface `VMPlugin`

  - ### makeRecordComponents

    protected void makeRecordComponents(CompileUnit cu, ClassNode classNode, Class<?> clazz)

  - ### makeClassNode

    protected ClassNode makeClassNode(CompileUnit cu, Type t, Class<?> c)

  - ### fillParameterNames

    protected void fillParameterNames(String[] names, Member member)

  - ### checkCanSetAccessible

    public boolean checkCanSetAccessible(AccessibleObject accessibleObject, Class<?> callerClass)
    The following scenarios can not set accessible, i.e. the return value is false 1) SecurityException occurred 2) the accessible object is a Constructor object for the Class class
    Specified by:
      `checkCanSetAccessible` in interface `VMPlugin`
    Parameters:
      `accessibleObject` - the accessible object to check
      `callerClass` - the callerClass to invoke `setAccessible`
    Returns:
      the check result

  - ### checkAccessible

    public boolean checkAccessible(Class<?> callerClass, Class<?> declaringClass, int memberModifiers, boolean allowIllegalAccess)
    Description copied from interface: `VMPlugin`
    check whether the member can be accessed or not
    Specified by:
      `checkAccessible` in interface `VMPlugin`
    Parameters:
      `callerClass` - callerClass the callerClass to invoke `setAccessible`
      `declaringClass` - the type of member owner
      `memberModifiers` - modifiers of member
      `allowIllegalAccess` - whether to allow illegal access
    Returns:
      the result of checking

  - ### trySetAccessible

    public boolean trySetAccessible(AccessibleObject ao)
    Description copied from interface: `VMPlugin`
    Set the `accessible` flag for this reflected object to `true` if possible.
    Specified by:
      `trySetAccessible` in interface `VMPlugin`
    Parameters:
      `ao` - the accessible object
    Returns:
      `true` if the `accessible` flag is set to `true`; `false` if access cannot be enabled.

  - ### transformMetaMethod

    public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod)
    Description copied from interface: `VMPlugin`
    transform meta method.
    Specified by:
      `transformMetaMethod` in interface `VMPlugin`
    Parameters:
      `metaClass` - metaclass
      `metaMethod` - the original meta method
    Returns:
      the transformed meta method

  - ### transformMetaMethod

    public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?> caller)
    Description copied from interface: `VMPlugin`
    transform meta method
    Specified by:
      `transformMetaMethod` in interface `VMPlugin`
    Parameters:
      `metaClass` - metaclass
      `metaMethod` - the original meta method
      `caller` - caller class, whose method sets accessible for methods
    Returns:
      the transformed meta method

  - ### invalidateCallSites

    public void invalidateCallSites()
    Specified by:
      `invalidateCallSites` in interface `VMPlugin`

  - ### getInvokeSpecialHandle

    public Object getInvokeSpecialHandle(Method method, Object receiver)
    Description copied from interface: `VMPlugin`
    Returns a handle with bound receiver to invokeSpecial the given method. This method will require at least Java 7, but since the source has to compile on older Java versions as well it is not marked to return a MethodHandle and uses Object instead
    Specified by:
      `getInvokeSpecialHandle` in interface `VMPlugin`
    Returns:
      null in case of jdk<7, otherwise a handle that takes the method call arguments for the invokespecial call

  - ### invokeHandle

    public Object invokeHandle(Object handle, Object[] arguments) throws Throwable
    Description copied from interface: `VMPlugin`
    Invokes a handle produced by #getInvokeSpecialdHandle
    Specified by:
      `invokeHandle` in interface `VMPlugin`
    Parameters:
      `handle` - the handle
      `arguments` - arguments for the method call, can be empty but not null
    Returns:
      the result of the method call
    Throws:
      `Throwable`

  - ### of

    @Deprecated(since="5.0.0") public static MethodHandles.Lookup of(Class<?> targetClass)
    Deprecated.

  - ### newLookup

    protected MethodHandles.Lookup newLookup(Class<?> targetClass)

  - ### doPrivileged

    @Deprecated(since="4.0.2") public <T> T doPrivileged(PrivilegedAction<T> action)
    Deprecated.
    Description copied from interface: `VMPlugin`
    Performs the specified PrivilegedAction with privileges enabled on platforms which support that capability, otherwise the action is performed ignoring privileges.
    Specified by:
      `doPrivileged` in interface `VMPlugin`
    Type Parameters:
      `T` - the type of the value returned by the PrivilegedAction's run method
    Parameters:
      `action` - the action to be performed
    Returns:
      the value returned by the action's run method

  - ### doPrivileged

    @Deprecated(since="4.0.2") public <T> T doPrivileged(PrivilegedExceptionAction<T> action)
    Deprecated.
    Description copied from interface: `VMPlugin`
    Performs the specified PrivilegedExceptionAction with privileges enabled on platforms which support that capability, otherwise the action is performed ignoring privileges.
    Specified by:
      `doPrivileged` in interface `VMPlugin`
    Type Parameters:
      `T` - the type of the value returned by the PrivilegedAction's run method
    Parameters:
      `action` - the action to be performed
    Returns:
      the value returned by the action's run method