Package org.apache.tapestry5.plastic

## Class PlasticManager

- java.lang.Object
- - org.apache.tapestry5.plastic.PlasticManager

- All Implemented Interfaces:
    `PlasticClassListenerHub`

      public class PlasticManager
      extends java.lang.Object
      implements PlasticClassListenerHub

  Manages the internal class loaders and other logics necessary to load and transform existing classes, or to create new classes dynamically at runtime. New instances are instantiates using `withClassLoader(ClassLoader)` or `withContextClassLoader()`, then configuring the returned options object before invoking `PlasticManager.PlasticManagerBuilder.create()`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `PlasticManager.PlasticManagerBuilder` | A builder object for configuring the PlasticManager before instantiating it.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addPlasticClassListener​(PlasticClassListener listener)` |
    `<T> ClassInstantiator<T>` | `createClass​(java.lang.Class<T> baseClass, PlasticClassTransformer callback)` | Creates an entirely new class, extending from the provided base class.
    `<T> ClassInstantiator<T>` | `createProxy​(java.lang.Class<T> interfaceType, java.lang.Class<? extends T> implementationType, PlasticClassTransformer callback)` | Creates an entirely new class.
    `<T> ClassInstantiator<T>` | `createProxy​(java.lang.Class<T> interfaceType, java.lang.Class<? extends T> implementationType, PlasticClassTransformer callback, boolean introduceInterface)` | Creates an entirely new class.
    `<T> ClassInstantiator<T>` | `createProxy​(java.lang.Class<T> interfaceType, PlasticClassTransformer callback)` | Creates an entirely new class.
    `<T> ClassInstantiator<T>` | `createProxy​(java.lang.Class<T> interfaceType, PlasticClassTransformer callback, boolean introduceInterface)` | Creates an entirely new class.
    `<T> PlasticClassTransformation<T>` | `createProxyTransformation​(java.lang.Class interfaceType, java.lang.Class implementationType)` | Returns `createProxyTransformation(interfaceType, implementationType, true)`
    `<T> PlasticClassTransformation<T>` | `createProxyTransformation​(java.lang.Class interfaceType, java.lang.Class implementationType, boolean introduceInterface)` | Creates the underlying `PlasticClassTransformation` for an interface proxy.
    `<T> ClassInstantiator<T>` | `getClassInstantiator​(java.lang.String className)` | Gets the `ClassInstantiator` for the indicated class, which must be in a transformed package.
    `java.lang.ClassLoader` | `getClassLoader()` | Returns the ClassLoader that is used to instantiate transformed classes.
    `PlasticClassPool` | `getPool()` | Returns the Plastic class pool used by this instance.
    `void` | `removePlasticClassListener​(PlasticClassListener listener)` |
    `boolean` | `shouldInterceptClassLoading​(java.lang.String className)` | Returns whether a given class will have it classloading intercepted for live class reloading.
    `static PlasticManager.PlasticManagerBuilder` | `withClassLoader​(java.lang.ClassLoader loader)` | Creates a new builder using the specified class loader.
    `static PlasticManager.PlasticManagerBuilder` | `withContextClassLoader()` | Creates a new builder using the thread's context class loader.

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

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

- - ### Method Detail

    - #### withContextClassLoader

          public static PlasticManager.PlasticManagerBuilder withContextClassLoader()

      Creates a new builder using the thread's context class loader.

    - #### withClassLoader

          public static PlasticManager.PlasticManagerBuilder withClassLoader​(java.lang.ClassLoader loader)

      Creates a new builder using the specified class loader.

    - #### getClassLoader

          public java.lang.ClassLoader getClassLoader()

      Returns the ClassLoader that is used to instantiate transformed classes. The parent class loader of the returned class loader is the context class loader, or the class loader specified by `withClassLoader(ClassLoader)`.
      Returns:
        class loader used to load classes in controlled packages

    - #### getClassInstantiator

          public <T> ClassInstantiator<T> getClassInstantiator​(java.lang.String className)

      Gets the `ClassInstantiator` for the indicated class, which must be in a transformed package.
      Parameters:
        `className` - fully qualified class name
      Returns:
        instantiator (configured via the delegate for the class
      Throws:
        `java.lang.IllegalArgumentException` - if the class is not a transformed class

    - #### createClass

          public <T> ClassInstantiator<T> createClass​(java.lang.Class<T> baseClass,
                                                      PlasticClassTransformer callback)

      Creates an entirely new class, extending from the provided base class.
      Parameters:
        `baseClass` - class to extend from, which must be a class, not an interface
        `callback` - used to configure the new class
      Returns:
        the instantiator, which allows instances of the new class to be created

    - #### createProxy

          public <T> ClassInstantiator<T> createProxy​(java.lang.Class<T> interfaceType,
                                                      PlasticClassTransformer callback)

      Creates an entirely new class. The class extends from Object and implements the provided interface.
      Parameters:
        `interfaceType` - class to extend from, which must be a class, not an interface
        `callback` - used to configure the new class
      Returns:
        the instantiator, which allows instances of the new class to be created
      See Also:
        `createProxyTransformation(Class, Class)`

    - #### createProxy

          public <T> ClassInstantiator<T> createProxy​(java.lang.Class<T> interfaceType,
                                                      PlasticClassTransformer callback,
                                                      boolean introduceInterface)

      Creates an entirely new class. The class extends from Object and implements the provided interface.
      Parameters:
        `interfaceType` - class to extend from, which must be a class, not an interface
        `callback` - used to configure the new class
      Returns:
        the instantiator, which allows instances of the new class to be created
      See Also:
        `createProxyTransformation(Class, Class)`

    - #### createProxy

          public <T> ClassInstantiator<T> createProxy​(java.lang.Class<T> interfaceType,
                                                      java.lang.Class<? extends T> implementationType,
                                                      PlasticClassTransformer callback)

      Creates an entirely new class. The class extends from Object and implements the provided interface.
      Parameters:
        `interfaceType` - class to extend from, which must be a class, not an interface
        `implementationType` - class that implements interfaceType. It can be null.
        `callback` - used to configure the new class
      Returns:
        the instantiator, which allows instances of the new class to be created
      Since:
        5.4
      See Also:
        `createProxyTransformation(Class, Class)`

    - #### createProxy

          public <T> ClassInstantiator<T> createProxy​(java.lang.Class<T> interfaceType,
                                                      java.lang.Class<? extends T> implementationType,
                                                      PlasticClassTransformer callback,
                                                      boolean introduceInterface)

      Creates an entirely new class. The class extends from Object and implements the provided interface.
      Parameters:
        `interfaceType` - class to extend from, which must be a class, not an interface
        `implementationType` - class that implements interfaceType. It can be null.
        `callback` - used to configure the new class
        `introduceInterface` - whether to introduce the interface to the Plastic class or not.
      Returns:
        the instantiator, which allows instances of the new class to be created
      Since:
        5.4.5
      See Also:
        `createProxyTransformation(Class, Class)`

    - #### createProxyTransformation

          public <T> PlasticClassTransformation<T> createProxyTransformation​(java.lang.Class interfaceType,
                                                                             java.lang.Class implementationType)

      Returns `createProxyTransformation(interfaceType, implementationType, true)`

    - #### createProxyTransformation

          public <T> PlasticClassTransformation<T> createProxyTransformation​(java.lang.Class interfaceType,
                                                                             java.lang.Class implementationType,
                                                                             boolean introduceInterface)

      Creates the underlying `PlasticClassTransformation` for an interface proxy. This should only be used in the cases where encapsulating the PlasticClass construction into a callback is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
      Parameters:
        `interfaceType` - class proxy will extend from
        `implementationType` - class that implements interfaceType. It can be null.
        `introduceInterface` - whether `result.getPlasticClass().introduceInterface(interfaceType);` should be called or not.
      Returns:
        transformation from which an instantiator may be created

    - #### addPlasticClassListener

          public void addPlasticClassListener​(PlasticClassListener listener)

      Specified by:
        `addPlasticClassListener` in interface `PlasticClassListenerHub`

    - #### removePlasticClassListener

          public void removePlasticClassListener​(PlasticClassListener listener)

      Specified by:
        `removePlasticClassListener` in interface `PlasticClassListenerHub`

    - #### shouldInterceptClassLoading

          public boolean shouldInterceptClassLoading​(java.lang.String className)

      Returns whether a given class will have it classloading intercepted for live class reloading.
      Since:
        5.8.3

    - #### getPool

          public PlasticClassPool getPool()

      Returns the Plastic class pool used by this instance.
      Since:
        5.8.3