Class PlasticClassImpl
java.lang.Object
org.apache.tapestry5.internal.plastic.Lockable
org.apache.tapestry5.internal.plastic.PlasticClassImpl
- All Implemented Interfaces:
org.apache.tapestry5.internal.plastic.asm.Opcodes
,InternalPlasticClassTransformation
,AnnotationAccess
,PlasticClass
,PlasticClassTransformation
public class PlasticClassImpl
extends Lockable
implements PlasticClass, InternalPlasticClassTransformation, org.apache.tapestry5.internal.plastic.asm.Opcodes
-
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_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V9
-
Constructor Summary
ConstructorsConstructorDescriptionPlasticClassImpl
(org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode, org.apache.tapestry5.internal.plastic.asm.tree.ClassNode implementationClassNode, PlasticClassPool pool, InheritanceData parentInheritanceData, StaticContext parentStaticContext, boolean proxy) -
Method Summary
Modifier and TypeMethodDescriptionaddToString
(String toStringValue) Conditionally adds an implementation oftoString()
to the class, but only if it is not already present in the class, or in a (transformed) super-class.Terminates the class transformation process, finishes any final bookkeeping, and returns an object used to instantiate the transformed class.Returns all non-introduced fields, in sorted order by name.<T extends Annotation>
TgetAnnotation
(Class<T> annotationType) Returns an instantiated annotation, or null if the target does not have the indicated annotation.Returns the fully qualified class name of the class being transformed.<T extends Annotation>
List<PlasticField>getFieldsWithAnnotation
(Class<T> annotationType) Matches all fields (claimed or not) that have the given annotation.Returns all methods of the class, in sorted order.<T extends Annotation>
List<PlasticMethod>getMethodsWithAnnotation
(Class<T> annotationType) Matches methods with the given annotation.Returns the PlasticClass being transformed.Returns the name of the super-class of the class being transformed.Class<?>
Returns all unclaimed fields, in sorted order by name.<T extends Annotation>
booleanhasAnnotation
(Class<T> annotationType) Checks to see if the target has an annotation of the given type.void
introduceField
(Class fieldType, String suggestedName) Convenience method that uses a Java class rather than a type name.introduceField
(String className, String suggestedName) Introduces a new private field into the class.introduceInterface
(Class interfaceType) Introduces each method defined by the interface into the class.introduceMethod
(Method method) A convenience that creates aMethodDescription
from the Method and introduces that.introduceMethod
(MethodDescription description) Returns an existing method declared in this class, or introduces a new method into this class.introduceMethod
(MethodDescription description, InstructionBuilderCallback callback) Returns an existing method declared in this class, or introduces a new method into this class.introducePrivateMethod
(String typeName, String suggestedName, String[] argumentTypes, String[] exceptionTypes) Introduces a new private method into the class, ensuring that the method name is unique.boolean
isInterfaceImplemented
(Class interfaceType) Returns true if this class, or a super-class, implements the indicated interface.boolean
isMethodImplemented
(MethodDescription description) Returns true if this class has an implementation of the indicated method, or a super-class provides a non-abstract implementation.onConstruct
(ConstructorCallback callback) Adds the callback for execution when an instance of the class is instantiated.proxyInterface
(Class interfaceType, PlasticField field) Introduces the interface, and then invokesPlasticMethod.delegateTo(PlasticField)
on each method defined by the interface.proxyInterface
(Class interfaceType, PlasticMethod method) Introduces the interface, and then invokesPlasticMethod.delegateTo(PlasticMethod)
on each method defined by the interface.toString()
-
Constructor Details
-
PlasticClassImpl
public PlasticClassImpl(org.apache.tapestry5.internal.plastic.asm.tree.ClassNode classNode, org.apache.tapestry5.internal.plastic.asm.tree.ClassNode implementationClassNode, PlasticClassPool pool, InheritanceData parentInheritanceData, StaticContext parentStaticContext, boolean proxy) - Parameters:
classNode
-implementationClassNode
-pool
-parentInheritanceData
-parentStaticContext
-proxy
-
-
-
Method Details
-
hasAnnotation
Description copied from interface:AnnotationAccess
Checks to see if the target has an annotation of the given type.- Specified by:
hasAnnotation
in interfaceAnnotationAccess
-
getAnnotation
Description copied from interface:AnnotationAccess
Returns an instantiated annotation, or null if the target does not have the indicated annotation.- Specified by:
getAnnotation
in interfaceAnnotationAccess
-
proxyInterface
Description copied from interface:PlasticClass
Introduces the interface, and then invokesPlasticMethod.delegateTo(PlasticField)
on each method defined by the interface.- Specified by:
proxyInterface
in interfacePlasticClass
- Parameters:
interfaceType
- defines the interface to proxyfield
- field containing an object to delegate to- Returns:
- this plastic class, for further configuration
-
createInstantiator
Description copied from interface:PlasticClassTransformation
Terminates the class transformation process, finishes any final bookkeeping, and returns an object used to instantiate the transformed class. Once this method is invoked, no other methods of thePlasticClass
(or related objects) can be invoked. The returned ClassInstantiator has an emptyInstanceContext
map. UseClassInstantiator.with(Class, Object)
to create a new ClassInstantiator with new InstanceContext entries.- Specified by:
createInstantiator
in interfacePlasticClassTransformation
-
getFieldsWithAnnotation
Description copied from interface:PlasticClass
Matches all fields (claimed or not) that have the given annotation. Returns the fields in sorted order.- Specified by:
getFieldsWithAnnotation
in interfacePlasticClass
- Returns:
- Unmodifiable List of fields.
-
getAllFields
Description copied from interface:PlasticClass
Returns all non-introduced fields, in sorted order by name.- Specified by:
getAllFields
in interfacePlasticClass
- Returns:
- Unmodifiable list of fields.
-
getUnclaimedFields
Description copied from interface:PlasticClass
Returns all unclaimed fields, in sorted order by name. This does not include introduced fields.- Specified by:
getUnclaimedFields
in interfacePlasticClass
- Returns:
- Unmodifiable list of fields.
- See Also:
-
introducePrivateMethod
public PlasticMethod introducePrivateMethod(String typeName, String suggestedName, String[] argumentTypes, String[] exceptionTypes) Description copied from interface:PlasticClass
Introduces a new private method into the class, ensuring that the method name is unique.- Specified by:
introducePrivateMethod
in interfacePlasticClass
- Parameters:
typeName
- return type of methodsuggestedName
- suggested name for the method; the actual method name may be modified to ensure uniquenessargumentTypes
- types of any arguments (may be null)exceptionTypes
- type of any checked exceptions (may be null)- Returns:
- new method, with default implementation
-
introduceField
Description copied from interface:PlasticClass
Introduces a new private field into the class.- Specified by:
introduceField
in interfacePlasticClass
- Parameters:
className
- the Java class name for the field, or (possibly) a primitive type name or an arraysuggestedName
- the suggested name for the field, which may be modified to ensure that the field name is unique- Returns:
- PlasticField for the introduced field
-
introduceField
Description copied from interface:PlasticClass
Convenience method that uses a Java class rather than a type name.- Specified by:
introduceField
in interfacePlasticClass
-
getMethodsWithAnnotation
Description copied from interface:PlasticClass
Matches methods with the given annotation.- Specified by:
getMethodsWithAnnotation
in interfacePlasticClass
- Returns:
- Unmodifiable list of methods, in sorted order.
-
getMethods
Description copied from interface:PlasticClass
Returns all methods of the class, in sorted order. This does not include static methods, or any introduced methods.- Specified by:
getMethods
in interfacePlasticClass
- Returns:
- Unmodifiable list of methods.
-
introduceMethod
Description copied from interface:PlasticClass
Returns an existing method declared in this class, or introduces a new method into this class. The method is created with default behavior. If the method overrides a non-private, non-abstract method implemented in a transformed super class, the the default behavior is to invoke that method and return its value. Otherwise, the default behavior is to ignore parameters and return 0, false, or null. Void methods will invoke the super-class implementation (if it exists) and return no value. It is allowed for the method description to indicate an abstract method; however the abstract flag will be removed, and a non-abstract method will be created.- Specified by:
introduceMethod
in interfacePlasticClass
- Parameters:
description
- describes the method name, visibility, return value, etc.- Returns:
- a new (or previously created) PlasticMethod for the method
-
introduceMethod
public PlasticMethod introduceMethod(MethodDescription description, InstructionBuilderCallback callback) Description copied from interface:PlasticClass
Returns an existing method declared in this class, or introduces a new method into this class. The method is created with default behavior. It is allowed for the method description to indicate an abstract method; however the abstract flag will be removed, and a non-abstract method will be created.- Specified by:
introduceMethod
in interfacePlasticClass
- Parameters:
description
- describes the method name, visibility, return value, etc.callback
- used to create the implementation of the method- Returns:
- a new (or previously created) PlasticMethod for the method
-
introduceMethod
Description copied from interface:PlasticClass
A convenience that creates aMethodDescription
from the Method and introduces that. This is often invoked when walking the methods of an interface and introducing each of those methods. Introduced methods are always concrete, not abstract. The abstract flag on the method modifiers will always be stripped off, which is handy when introducing methods from an interface.- Specified by:
introduceMethod
in interfacePlasticClass
- Parameters:
method
- to introduce- Returns:
- new (or previously created) PlasticMethod
-
installShim
-
createShimInstance
-
getPlasticClass
Description copied from interface:PlasticClassTransformation
Returns the PlasticClass being transformed.- Specified by:
getPlasticClass
in interfacePlasticClassTransformation
- Returns:
- PlasticClass instance
-
getTransformedClass
- Specified by:
getTransformedClass
in interfaceInternalPlasticClassTransformation
-
getClassName
Description copied from interface:PlasticClass
Returns the fully qualified class name of the class being transformed.- Specified by:
getClassName
in interfacePlasticClass
-
introduceInterface
Description copied from interface:PlasticClass
Introduces each method defined by the interface into the class. Determines which new methods must be introduced in order to ensure that all methods of the interface are implemented. The newly introduced methods, if any, are returned.- Specified by:
introduceInterface
in interfacePlasticClass
-
proxyInterface
Description copied from interface:PlasticClass
Introduces the interface, and then invokesPlasticMethod.delegateTo(PlasticMethod)
on each method defined by the interface.- Specified by:
proxyInterface
in interfacePlasticClass
- Parameters:
interfaceType
- defines the interface to proxymethod
- method to delegate to- Returns:
- this plastic class, for further configuration
-
addToString
Description copied from interface:PlasticClass
Conditionally adds an implementation oftoString()
to the class, but only if it is not already present in the class, or in a (transformed) super-class.- Specified by:
addToString
in interfacePlasticClass
- Parameters:
toStringValue
- the fixed value to be returned from invoking toString()- Returns:
- this plastic class, for further configuration
-
isMethodImplemented
Description copied from interface:PlasticClass
Returns true if this class has an implementation of the indicated method, or a super-class provides a non-abstract implementation.- Specified by:
isMethodImplemented
in interfacePlasticClass
-
isInterfaceImplemented
Description copied from interface:PlasticClass
Returns true if this class, or a super-class, implements the indicated interface.- Specified by:
isInterfaceImplemented
in interfacePlasticClass
- Returns:
- true if the interface is implemented
-
getSuperClassName
Description copied from interface:PlasticClass
Returns the name of the super-class of the class being transformed.- Specified by:
getSuperClassName
in interfacePlasticClass
-
onConstruct
Description copied from interface:PlasticClass
Adds the callback for execution when an instance of the class is instantiated.- Specified by:
onConstruct
in interfacePlasticClass
- Parameters:
callback
- to execute at instance construction time
-
toString
-