org.apache.tapestry5.internal.plastic
Class PlasticClassPool

java.lang.Object
  extended by org.apache.tapestry5.internal.plastic.PlasticClassPool
All Implemented Interfaces:
org.apache.tapestry5.internal.plastic.asm.Opcodes, ClassLoaderDelegate, PlasticClassListenerHub

public class PlasticClassPool
extends Object
implements ClassLoaderDelegate, org.apache.tapestry5.internal.plastic.asm.Opcodes, PlasticClassListenerHub

Responsible for managing a class loader that allows ASM ClassNodes to be instantiated as runtime classes.


Field Summary
 
Fields inherited from interface org.apache.tapestry5.internal.plastic.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
PlasticClassPool(ClassLoader parentLoader, PlasticManagerDelegate delegate, Set<String> controlledPackages, Set<TransformationOption> options)
          Creates the pool with a set of controlled packages; all classes in the controlled packages are loaded by the pool's class loader, and all top-level classes in the controlled packages are transformed via the delegate.
 
Method Summary
 void addPlasticClassListener(PlasticClassListener listener)
           
 org.apache.tapestry5.internal.plastic.asm.tree.ClassNode constructClassNodeFromBytecode(String className)
          Constructs a class node by reading the raw bytecode for a class and instantiating a ClassNode (via ClassReader.accept(org.apache.tapestry5.internal.plastic.asm.ClassVisitor, int)).
protected  Object createAnnotation(String className, org.apache.tapestry5.internal.plastic.asm.tree.AnnotationNode node)
           
 AnnotationAccess createAnnotationAccess(List<org.apache.tapestry5.internal.plastic.asm.tree.AnnotationNode> annotationNodes)
           
 AnnotationAccess createAnnotationAccess(String className)
           
 PlasticClassTransformation createTransformation(String baseClassName, String newClassName)
           
 ClassInstantiator getClassInstantiator(String className)
           
 ClassLoader getClassLoader()
           
 InternalPlasticClassTransformation getPlasticClassTransformation(String className)
          For a fully-qualified class name of an existing class, loads the bytes for the class and returns a PlasticClass instance.
 Class<?> loadAndTransformClass(String className)
          Load the class, transforming it as necessary.
 Class realize(String primaryClassName, ClassType classType, org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode)
           
 Class realizeTransformedClass(org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode, InheritanceData inheritanceData, StaticContext staticContext)
           
 void removePlasticClassListener(PlasticClassListener listener)
           
 boolean shouldInterceptClassLoading(String className)
          Identifies which classes are to be loaded.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PlasticClassPool

public PlasticClassPool(ClassLoader parentLoader,
                        PlasticManagerDelegate delegate,
                        Set<String> controlledPackages,
                        Set<TransformationOption> options)
Creates the pool with a set of controlled packages; all classes in the controlled packages are loaded by the pool's class loader, and all top-level classes in the controlled packages are transformed via the delegate.

Parameters:
parentLoader - typically, the Thread's context class loader
delegate - responsible for end stages of transforming top-level classes
controlledPackages - set of package names (note: retained, not copied)
options - used when transforming classes
Method Detail

getClassLoader

public ClassLoader getClassLoader()

realizeTransformedClass

public Class realizeTransformedClass(org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode,
                                     InheritanceData inheritanceData,
                                     StaticContext staticContext)

realize

public Class realize(String primaryClassName,
                     ClassType classType,
                     org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode)

createAnnotationAccess

public AnnotationAccess createAnnotationAccess(String className)

createAnnotationAccess

public AnnotationAccess createAnnotationAccess(List<org.apache.tapestry5.internal.plastic.asm.tree.AnnotationNode> annotationNodes)

createAnnotation

protected Object createAnnotation(String className,
                                  org.apache.tapestry5.internal.plastic.asm.tree.AnnotationNode node)

shouldInterceptClassLoading

public boolean shouldInterceptClassLoading(String className)
Description copied from interface: ClassLoaderDelegate
Identifies which classes are to be loaded.

Specified by:
shouldInterceptClassLoading in interface ClassLoaderDelegate
Parameters:
className - fully qualified class name
Returns:
true if the class should be intercepted, false to let parent class loader load class

loadAndTransformClass

public Class<?> loadAndTransformClass(String className)
                               throws ClassNotFoundException
Description copied from interface: ClassLoaderDelegate
Load the class, transforming it as necessary.

Specified by:
loadAndTransformClass in interface ClassLoaderDelegate
Parameters:
className - binary class name
Returns:
loaded and (if not an inner class) transformed class
Throws:
ClassNotFoundException

getPlasticClassTransformation

public InternalPlasticClassTransformation getPlasticClassTransformation(String className)
                                                                 throws ClassNotFoundException
For a fully-qualified class name of an existing class, loads the bytes for the class and returns a PlasticClass instance.

Throws:
ClassNotFoundException

constructClassNodeFromBytecode

public org.apache.tapestry5.internal.plastic.asm.tree.ClassNode constructClassNodeFromBytecode(String className)
Constructs a class node by reading the raw bytecode for a class and instantiating a ClassNode (via ClassReader.accept(org.apache.tapestry5.internal.plastic.asm.ClassVisitor, int)).

Parameters:
className - fully qualified class name
Returns:
corresponding ClassNode

createTransformation

public PlasticClassTransformation createTransformation(String baseClassName,
                                                       String newClassName)

getClassInstantiator

public ClassInstantiator getClassInstantiator(String className)

addPlasticClassListener

public void addPlasticClassListener(PlasticClassListener listener)
Specified by:
addPlasticClassListener in interface PlasticClassListenerHub

removePlasticClassListener

public void removePlasticClassListener(PlasticClassListener listener)
Specified by:
removePlasticClassListener in interface PlasticClassListenerHub


Copyright © 2003-2012 The Apache Software Foundation.