public class PlasticClassImpl extends Lockable implements PlasticClass, InternalPlasticClassTransformation, 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, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9_EXPERIMENTAL, 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, V9| Constructor and Description |
|---|
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) |
| Modifier and Type | Method and Description |
|---|---|
PlasticClass |
addToString(String toStringValue)
Conditionally adds an implementation of
toString() to the class, but only if it is not already
present in the class, or in a (transformed) super-class. |
ClassInstantiator |
createInstantiator()
Terminates the class transformation process, finishes any final bookkeeping, and
returns an object used to instantiate the transformed class.
|
PlasticClassHandleShim |
createShimInstance() |
List<PlasticField> |
getAllFields()
Returns all non-introduced fields, in sorted order by name.
|
<T extends Annotation> |
getAnnotation(Class<T> annotationType)
Returns an instantiated annotation, or null if the target does not have the indicated annotation.
|
String |
getClassName()
Returns the fully qualified class name of the class being transformed.
|
<T extends Annotation> |
getFieldsWithAnnotation(Class<T> annotationType)
Matches all fields (claimed or not) that have the given annotation.
|
List<PlasticMethod> |
getMethods()
Returns all methods of the class, in sorted order.
|
<T extends Annotation> |
getMethodsWithAnnotation(Class<T> annotationType)
Matches methods with the given annotation.
|
PlasticClass |
getPlasticClass()
Returns the PlasticClass being transformed.
|
String |
getSuperClassName()
Returns the name of the super-class of the class being transformed.
|
Class<?> |
getTransformedClass() |
List<PlasticField> |
getUnclaimedFields()
Returns all unclaimed fields, in sorted order by name.
|
<T extends Annotation> |
hasAnnotation(Class<T> annotationType)
Checks to see if the target has an annotation of the given type.
|
void |
installShim(PlasticClassHandleShim shim) |
PlasticField |
introduceField(Class fieldType,
String suggestedName)
Convenience method that uses a Java class rather than a type name.
|
PlasticField |
introduceField(String className,
String suggestedName)
Introduces a new private field into the class.
|
Set<PlasticMethod> |
introduceInterface(Class interfaceType)
Introduces each method defined by the interface into the class.
|
PlasticMethod |
introduceMethod(Method method)
A convenience that creates a
MethodDescription from the Method and introduces that. |
PlasticMethod |
introduceMethod(MethodDescription description)
Returns an existing method declared in this class, or introduces a new method into this class.
|
PlasticMethod |
introduceMethod(MethodDescription description,
InstructionBuilderCallback callback)
Returns an existing method declared in this class, or introduces a new method into this class.
|
PlasticMethod |
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.
|
PlasticClass |
onConstruct(ConstructorCallback callback)
Adds the callback for execution when an instance of the class is instantiated.
|
PlasticClass |
proxyInterface(Class interfaceType,
PlasticField field)
Introduces the interface, and then invokes
PlasticMethod.delegateTo(PlasticField) on each method
defined by the interface. |
PlasticClass |
proxyInterface(Class interfaceType,
PlasticMethod method)
Introduces the interface, and then invokes
PlasticMethod.delegateTo(PlasticMethod) on each method
defined by the interface. |
String |
toString() |
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)
classNode - implementationClassNode - pool - parentInheritanceData - parentStaticContext - proxy - public <T extends Annotation> boolean hasAnnotation(Class<T> annotationType)
AnnotationAccesshasAnnotation in interface AnnotationAccesspublic <T extends Annotation> T getAnnotation(Class<T> annotationType)
AnnotationAccessgetAnnotation in interface AnnotationAccesspublic PlasticClass proxyInterface(Class interfaceType, PlasticField field)
PlasticClassPlasticMethod.delegateTo(PlasticField) on each method
defined by the interface.proxyInterface in interface PlasticClassinterfaceType - defines the interface to proxyfield - field containing an object to delegate topublic ClassInstantiator createInstantiator()
PlasticClassTransformationPlasticClass (or related objects) can be invoked.
The returned ClassInstantiator has an empty InstanceContext map. Use
ClassInstantiator.with(Class, Object) to create a new ClassInstantiator with new InstanceContext entries.createInstantiator in interface PlasticClassTransformationpublic <T extends Annotation> List<PlasticField> getFieldsWithAnnotation(Class<T> annotationType)
PlasticClassgetFieldsWithAnnotation in interface PlasticClasspublic List<PlasticField> getAllFields()
PlasticClassgetAllFields in interface PlasticClasspublic List<PlasticField> getUnclaimedFields()
PlasticClassgetUnclaimedFields in interface PlasticClassPlasticField.claim(Object)public PlasticMethod introducePrivateMethod(String typeName, String suggestedName, String[] argumentTypes, String[] exceptionTypes)
PlasticClassintroducePrivateMethod in interface PlasticClasstypeName - 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)public PlasticField introduceField(String className, String suggestedName)
PlasticClassintroduceField in interface PlasticClassclassName - 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 uniquepublic PlasticField introduceField(Class fieldType, String suggestedName)
PlasticClassintroduceField in interface PlasticClasspublic <T extends Annotation> List<PlasticMethod> getMethodsWithAnnotation(Class<T> annotationType)
PlasticClassgetMethodsWithAnnotation in interface PlasticClasspublic List<PlasticMethod> getMethods()
PlasticClassgetMethods in interface PlasticClasspublic PlasticMethod introduceMethod(MethodDescription description)
PlasticClassintroduceMethod in interface PlasticClassdescription - describes the method name, visibility, return value, etc.public PlasticMethod introduceMethod(MethodDescription description, InstructionBuilderCallback callback)
PlasticClassintroduceMethod in interface PlasticClassdescription - describes the method name, visibility, return value, etc.callback - used to create the implementation of the methodpublic PlasticMethod introduceMethod(Method method)
PlasticClassMethodDescription 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.introduceMethod in interface PlasticClassmethod - to introducepublic void installShim(PlasticClassHandleShim shim)
public PlasticClassHandleShim createShimInstance()
public PlasticClass getPlasticClass()
PlasticClassTransformationgetPlasticClass in interface PlasticClassTransformationpublic Class<?> getTransformedClass()
getTransformedClass in interface InternalPlasticClassTransformationpublic String getClassName()
PlasticClassgetClassName in interface PlasticClasspublic Set<PlasticMethod> introduceInterface(Class interfaceType)
PlasticClassintroduceInterface in interface PlasticClasspublic PlasticClass proxyInterface(Class interfaceType, PlasticMethod method)
PlasticClassPlasticMethod.delegateTo(PlasticMethod) on each method
defined by the interface.proxyInterface in interface PlasticClassinterfaceType - defines the interface to proxymethod - method to delegate topublic PlasticClass addToString(String toStringValue)
PlasticClasstoString() to the class, but only if it is not already
present in the class, or in a (transformed) super-class.addToString in interface PlasticClasstoStringValue - the fixed value to be returned from invoking toString()public boolean isMethodImplemented(MethodDescription description)
PlasticClassisMethodImplemented in interface PlasticClasspublic boolean isInterfaceImplemented(Class interfaceType)
PlasticClassisInterfaceImplemented in interface PlasticClasspublic String getSuperClassName()
PlasticClassgetSuperClassName in interface PlasticClasspublic PlasticClass onConstruct(ConstructorCallback callback)
PlasticClassonConstruct in interface PlasticClasscallback - to execute at instance construction time5.6.4 - Copyright © 2003-2021 The Apache Software Foundation.