# Class ModuleLayer.Controller

java.lang.Object
java.lang.ModuleLayer.Controller

Enclosing class:
  `ModuleLayer`

public static final class ModuleLayer.Controller extends Object
Controls a module layer. The static methods defined by `ModuleLayer` to create module layers return a `Controller` that can be used to control modules in the layer.

Unless otherwise specified, passing a `null` argument to a method in this class causes a `NullPointerException` to be thrown.

API Note:
  Care should be taken with `Controller` objects, they should never be shared with untrusted code.
Since:
  9

## Method Summary

Modifier and Type
Method
Description
`ModuleLayer.Controller`
`addExports(Module source, String pn, Module target)`
Updates module `source` in the layer to export a package to module `target`.
`ModuleLayer.Controller`
`addOpens(Module source, String pn, Module target)`
Updates module `source` in the layer to open a package to module `target`.
`ModuleLayer.Controller`
`addReads(Module source, Module target)`
Updates module `source` in the layer to read module `target`.
`ModuleLayer.Controller`
`enableNativeAccess(Module target)`
Restricted.
Enables native access for a module in the layer if the caller's module has native access.
`ModuleLayer`
`layer()`
Returns the layer that this object controls.

### Methods declared in class Object

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

## Method Details

### layer

public ModuleLayer layer()
Returns the layer that this object controls.

Returns:
  the module layer

### addReads

public ModuleLayer.Controller addReads(Module source, Module target)
Updates module `source` in the layer to read module `target`. This method is a no-op if `source` already reads `target`.

Implementation Note:
  Read edges added by this method are weak and do not prevent `target` from being GC'ed when `source` is strongly reachable.
Parameters:
  `source` - The source module
  `target` - The target module to read
Returns:
  This controller
Throws:
  `IllegalArgumentException` - If `source` is not in the module layer
See Also:
  - `Module.addReads(Module)`

### addExports

public ModuleLayer.Controller addExports(Module source, String pn, Module target)
Updates module `source` in the layer to export a package to module `target`. This method is a no-op if `source` already exports the package to at least `target`.

Parameters:
  `source` - The source module
  `pn` - The package name
  `target` - The target module
Returns:
  This controller
Throws:
  `IllegalArgumentException` - If `source` is not in the module layer or the package is not in the source module
See Also:
  - `Module.addExports(String, Module)`

### addOpens

public ModuleLayer.Controller addOpens(Module source, String pn, Module target)
Updates module `source` in the layer to open a package to module `target`. This method is a no-op if `source` already opens the package to at least `target`.

Parameters:
  `source` - The source module
  `pn` - The package name
  `target` - The target module
Returns:
  This controller
Throws:
  `IllegalArgumentException` - If `source` is not in the module layer or the package is not in the source module
See Also:
  - `Module.addOpens(String, Module)`

### enableNativeAccess

public ModuleLayer.Controller enableNativeAccess(Module target)
`enableNativeAccess` is a restricted method of the Java platform.
Programs can only use `enableNativeAccess` when access to restricted methods is enabled.
Restricted methods are unsafe, and, if used incorrectly, might crash the JVM or result in memory corruption.
Enables native access for a module in the layer if the caller's module has native access.

Parameters:
  `target` - The module to update
Returns:
  This controller
Throws:
  `IllegalArgumentException` - If `target` is not in the module layer
  `IllegalCallerException` - If the caller is in a module that does not have native access enabled
Since:
  22