Package org.codehaus.groovy.vmplugin.v9

# Class Java9

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

All Implemented Interfaces:
  `VMPlugin`

    public class Java9
    extends Java8

Additional Java 9 based functions will be added here as needed.

- ## Constructor Summary

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

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `boolean` | `checkAccessible​(java.lang.Class<?> accessingClass, java.lang.Class<?> declaringClass, int memberModifiers, boolean allowIllegalAccess)` | check whether the member can be accessed or not
  `boolean` | `checkCanSetAccessible​(java.lang.reflect.AccessibleObject accessibleObject, java.lang.Class<?> callerClass)` | This method may be used by a caller in class C to check whether to enable access to a member of declaring class D successfully if `Java8.checkCanSetAccessible(java.lang.reflect.AccessibleObject, java.lang.Class)` returns true and any of the following hold:
  `java.util.Map<java.lang.String,​java.util.Set<java.lang.String>>` | `getDefaultImportClasses​(java.lang.String[] packageNames)` | Returns the default import classes: class name -> the relevant package names
  `java.lang.Object` | `getInvokeSpecialHandle​(java.lang.reflect.Method method, java.lang.Object receiver)` | Returns a handle with bound receiver to invokeSpecial the given method.
  `int` | `getVersion()` | Gives the version the plugin is made for
  `static java.lang.invoke.MethodHandles.Lookup` | `of​(java.lang.Class<?> targetClass)` |
  `MetaMethod` | `transformMetaMethod​(MetaClass metaClass, MetaMethod metaMethod, java.lang.Class<?> caller)` | transform meta method
  `boolean` | `trySetAccessible​(java.lang.reflect.AccessibleObject ao)` | Set the `accessible` flag for this reflected object to `true` if possible.

  ### Methods inherited from class org.codehaus.groovy.vmplugin.v8.Java8

  `configureAnnotation, configureAnnotationNodeFromDefinition, configureClassNode, configureTypeVariableDefinition, configureTypeVariableReference, fillParameterNames, getElementCode, getPluginDefaultGroovyMethods, getPluginStaticGroovyMethods, invalidateCallSites, invokeHandle, makeParameter, processParameters, setAdditionalClassInformation, transformMetaMethod`

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

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

- ## Constructor Details

  - ### Java9

    public Java9()

- ## Method Details

  - ### getVersion

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

  - ### getDefaultImportClasses

    public java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> getDefaultImportClasses​(java.lang.String[] packageNames)
    Description copied from interface: `VMPlugin`
    Returns the default import classes: class name -> the relevant package names
    Parameters:
      `packageNames` - the default import package names, e.g. java.lang.
    Returns:
      the default import classes

  - ### of

    public static java.lang.invoke.MethodHandles.Lookup of​(java.lang.Class<?> targetClass)

  - ### getInvokeSpecialHandle

    public java.lang.Object getInvokeSpecialHandle​(java.lang.reflect.Method method, java.lang.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`
    Overrides:
      `getInvokeSpecialHandle` in class `Java8`
    Returns:
      null in case of jdk<7, otherwise a handle that takes the method call arguments for the invokespecial call

  - ### checkCanSetAccessible

    public boolean checkCanSetAccessible​(java.lang.reflect.AccessibleObject accessibleObject, java.lang.Class<?> callerClass)
    This method may be used by a caller in class C to check whether to enable access to a member of declaring class D successfully if `Java8.checkCanSetAccessible(java.lang.reflect.AccessibleObject, java.lang.Class)` returns true and any of the following hold:

    1) C and D are in the same module. 2) The member is public and D is public in a package that the module containing D exports to at least the module containing C. 3) The member is protected static, D is public in a package that the module containing D exports to at least the module containing C, and C is a subclass of D. 4) D is in a package that the module containing D opens to at least the module containing C. All packages in unnamed and open modules are open to all modules and so this method always succeeds when D is in an unnamed or open module.

    Specified by:
      `checkCanSetAccessible` in interface `VMPlugin`
    Overrides:
      `checkCanSetAccessible` in class `Java8`
    Parameters:
      `accessibleObject` - the accessible object to check
      `callerClass` - the callerClass to invoke `setAccessible`
    Returns:
      the check result

  - ### trySetAccessible

    public boolean trySetAccessible​(java.lang.reflect.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`
    Overrides:
      `trySetAccessible` in class `Java8`
    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, java.lang.Class<?> caller)
    Description copied from interface: `VMPlugin`
    transform meta method
    Specified by:
      `transformMetaMethod` in interface `VMPlugin`
    Overrides:
      `transformMetaMethod` in class `Java8`
    Parameters:
      `metaClass` - meta class
      `metaMethod` - the original meta method
      `caller` - caller class, whose method sets accessible for methods
    Returns:
      the transformed meta method

  - ### checkAccessible

    public boolean checkAccessible​(java.lang.Class<?> accessingClass, java.lang.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`
    Overrides:
      `checkAccessible` in class `Java8`
    Parameters:
      `accessingClass` - 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