play.classloading.enhancers
Class Enhancer

java.lang.Object
  extended by 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
static class Enhancer.ApplicationClassesClasspath
          Dumb classpath implementation for javassist hacking
 
Field Summary
protected  javassist.ClassPool classPool
           
 
Constructor Summary
Enhancer()
           
 
Method Summary
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.

Throws:
java.io.IOException

enhanceThisClass

public abstract void enhanceThisClass(ApplicationClasses.ApplicationClass applicationClass)
                               throws java.lang.Exception
The magic happen here...

Throws:
java.lang.Exception

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

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

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

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.


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.


getAnnotations

protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtClass ctClass)
Retrieve all class annotations.


getAnnotations

protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtField ctField)
Retrieve all field annotations.


getAnnotations

protected static javassist.bytecode.AnnotationsAttribute getAnnotations(javassist.CtMethod ctMethod)
Retrieve all method annotations.



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