play.classloading.enhancers

## Class Enhancer

- java.lang.Object
- - play.classloading.enhancers.Enhancer

- Direct Known Subclasses:
    ContinuationEnhancer, ControllersEnhancer, JPAEnhancer, LocalvariablesNamesEnhancer, MailerEnhancer, PropertiesEnhancer, SigEnhancer

      public abstract class Enhancer
      extends java.lang.Object

  Enhancer support

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Enhancer.ApplicationClassesClasspath` Dumb classpath implementation for javassist hacking

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected javassist.ClassPool` | `classPool`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Enhancer()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected static void` | `createAnnotation(javassist.bytecode.AnnotationsAttribute attribute, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)` Create a new annotation to be dynamically inserted in the byte code.
    `protected static void` | `createAnnotation(javassist.bytecode.AnnotationsAttribute attribute, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.util.Map<java.lang.String,javassist.bytecode.annotation.MemberValue> members)` Create a new annotation to be dynamically inserted in the byte code.
    `abstract void` | `enhanceThisClass(ApplicationClasses.ApplicationClass applicationClass)` The magic happen here...
    `protected static javassist.bytecode.AnnotationsAttribute` | `getAnnotations(javassist.CtClass ctClass)` Retrieve all class annotations.
    `protected static javassist.bytecode.AnnotationsAttribute` | `getAnnotations(javassist.CtField ctField)` Retrieve all field annotations.
    `protected static javassist.bytecode.AnnotationsAttribute` | `getAnnotations(javassist.CtMethod ctMethod)` Retrieve all method annotations.
    `protected boolean` | `hasAnnotation(javassist.CtClass ctClass, java.lang.String annotation)` Test if a class has the provided annotation
    `protected boolean` | `hasAnnotation(javassist.CtField ctField, java.lang.String annotation)` Test if a field has the provided annotation
    `protected boolean` | `hasAnnotation(javassist.CtMethod ctMethod, java.lang.String annotation)` Test if a method has the provided annotation
    `javassist.CtClass` | `makeClass(ApplicationClasses.ApplicationClass applicationClass)` Construct a javassist CtClass from an application class.
    `static javassist.ClassPool` | `newClassPool()`

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

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

- - ### Field Detail

    - #### classPool

          protected javassist.ClassPool classPool

  - ### Constructor Detail

    - #### Enhancer

          public Enhancer()

  - ### Method Detail

    - #### newClassPool

          public static javassist.ClassPool newClassPool()

    - #### makeClass

          public javassist.CtClass makeClass(ApplicationClasses.ApplicationClass applicationClass)
                                      throws java.io.IOException

      Construct a javassist CtClass from an application class.
      Parameters:
        `applicationClass` - The application class to construct
      Returns:
        The javassist CtClass construct from the application class
      Throws:
        `java.io.IOException` - if problem occurred during construction

    - #### enhanceThisClass

          public abstract void enhanceThisClass(ApplicationClasses.ApplicationClass applicationClass)
                                         throws java.lang.Exception

      The magic happen here...
      Parameters:
        `applicationClass` - The application class to construct
      Throws:
        `java.lang.Exception` - if problem occurred during construction

    - #### hasAnnotation

          protected boolean hasAnnotation(javassist.CtClass ctClass,
                                          java.lang.String annotation)
                                   throws java.lang.ClassNotFoundException

      Test if a class has the provided annotation
      Parameters:
        `ctClass` - the javassist class representation
        `annotation` - fully qualified name of the annotation class eg."javax.persistence.Entity"
      Returns:
        true if class has the annotation
      Throws:
        `java.lang.ClassNotFoundException` - if class not found

    - #### hasAnnotation

          protected boolean hasAnnotation(javassist.CtField ctField,
                                          java.lang.String annotation)
                                   throws java.lang.ClassNotFoundException

      Test if a field has the provided annotation
      Parameters:
        `ctField` - the javassist field representation
        `annotation` - fully qualified name of the annotation class eg."javax.persistence.Entity"
      Returns:
        true if field has the annotation
      Throws:
        `java.lang.ClassNotFoundException` - if class not found

    - #### hasAnnotation

          protected boolean hasAnnotation(javassist.CtMethod ctMethod,
                                          java.lang.String annotation)
                                   throws java.lang.ClassNotFoundException

      Test if a method has the provided annotation
      Parameters:
        `ctMethod` - the javassist method representation
        `annotation` - fully qualified name of the annotation class eg."javax.persistence.Entity"
      Returns:
        true if field has the annotation
      Throws:
        `java.lang.ClassNotFoundException` - if class not found

    - #### createAnnotation

          protected static void createAnnotation(javassist.bytecode.AnnotationsAttribute attribute,
                                                 java.lang.Class<? extends java.lang.annotation.Annotation> annotationType,
                                                 java.util.Map<java.lang.String,javassist.bytecode.annotation.MemberValue> members)

      Create a new annotation to be dynamically inserted in the byte code.
      Parameters:
        `attribute` - annotation attribute
        `annotationType` - Annotation
        `members` - Member of the annotation

    - #### createAnnotation

          protected static void createAnnotation(javassist.bytecode.AnnotationsAttribute attribute,
                                                 java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)

      Create a new annotation to be dynamically inserted in the byte code.
      Parameters:
        `attribute` - annotation attribute
        `annotationType` - Annotation

    - #### getAnnotations

          protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtClass ctClass)

      Retrieve all class annotations.
      Parameters:
        `ctClass` - The given class
      Returns:
        All class annotations

    - #### getAnnotations

          protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtField ctField)

      Retrieve all field annotations.
      Parameters:
        `ctField` - The given field
      Returns:
        All field annotations.

    - #### getAnnotations

          protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtMethod ctMethod)

      Retrieve all method annotations.
      Parameters:
        `ctMethod` - The given methods
      Returns:
        all method annotations.

Guillaume Bort & zenexity - Distributed under Apache 2 licence, without any warrantly