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

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `Java8()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    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[] cBounds)` |
    `static ClassNode` | `configureTypeVariableReference​(String name)` |
    `protected int` | `getElementCode​(ElementType value)` |
    `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[] args)` | Invokes a handle produced by #getInvokeSpecialdHandle
    `protected Parameter` | `makeParameter​(CompileUnit cu, Type type, Class<?> cl, Annotation[] annotations, String name)` |
    `static MethodHandles.Lookup` | `of​(Class<?> declaringClass)` |
    `protected Parameter[]` | `processParameters​(CompileUnit compileUnit, Method m)` |
    `void` | `setAdditionalClassInformation​(ClassNode cn)` |
    `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`

- - ### Constructor Detail

    - #### Java8

          public Java8()

  - ### Method Detail

    - #### configureTypeVariableDefinition

          public static GenericsType configureTypeVariableDefinition​(ClassNode base,
                                                                     ClassNode[] cBounds)

    - #### configureTypeVariableReference

          public static ClassNode configureTypeVariableReference​(String name)

    - #### getPluginDefaultGroovyMethods

          public Class<?>[] getPluginDefaultGroovyMethods()

      Specified by:
        `getPluginDefaultGroovyMethods` 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

    - #### getElementCode

          protected int getElementCode​(ElementType value)

    - #### processParameters

          protected Parameter[] processParameters​(CompileUnit compileUnit,
                                                  Method m)

    - #### setAdditionalClassInformation

          public void setAdditionalClassInformation​(ClassNode cn)

      Specified by:
        `setAdditionalClassInformation` in interface `VMPlugin`

    - #### getPluginStaticGroovyMethods

          public Class<?>[] getPluginStaticGroovyMethods()

      Specified by:
        `getPluginStaticGroovyMethods` in interface `VMPlugin`

    - #### configureAnnotationNodeFromDefinition

          public void configureAnnotationNodeFromDefinition​(AnnotationNode definition,
                                                            AnnotationNode root)

      Specified by:
        `configureAnnotationNodeFromDefinition` in interface `VMPlugin`

    - #### configureAnnotation

          public void configureAnnotation​(AnnotationNode node)

      Specified by:
        `configureAnnotation` in interface `VMPlugin`

    - #### configureClassNode

          public void configureClassNode​(CompileUnit compileUnit,
                                         ClassNode classNode)

      Specified by:
        `configureClassNode` in interface `VMPlugin`

    - #### makeParameter

          protected Parameter makeParameter​(CompileUnit cu,
                                            Type type,
                                            Class<?> cl,
                                            Annotation[] annotations,
                                            String name)

    - #### 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,
                                                Class<?> caller)

      Description copied from interface: `VMPlugin`
      transform meta method
      Specified by:
        `transformMetaMethod` in interface `VMPlugin`
      Parameters:
        `metaClass` - meta class
        `metaMethod` - the original meta method
        `caller` - caller class, whose method sets accessible for methods
      Returns:
        the transformed meta method

    - #### transformMetaMethod

          public MetaMethod transformMetaMethod​(MetaClass metaClass,
                                                MetaMethod metaMethod)

      Description copied from interface: `VMPlugin`
      transform meta method.
      Specified by:
        `transformMetaMethod` in interface `VMPlugin`
      Parameters:
        `metaClass` - meta class
        `metaMethod` - the original meta method
      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[] args)
                              throws Throwable

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

    - #### of

          public static MethodHandles.Lookup of​(Class<?> declaringClass)