Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
5.3
Description
From ProQuest, they have a component that has this code:
public class Layout {
@Inject
private ComponentResources resources;
@Cached
public Component getPage()
}
The generated bytecode for the advised method looks ok:
public getPage()Lorg/apache/tapestry5/runtime/Component;
@Lorg/apache/tapestry5/annotations/Cached;()
NEW com/proquest/apps/onesearch/components/PageLayoutBasic$Invocation_getPage_123876a5ccf1f215
DUP
ALOAD 0
ALOAD 0
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.instanceContext : Lorg/apache/tapestry5/plastic/InstanceContext;
ALOAD 0
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.methodinvocationbundle_getPage_123876a5ccf1f22d : Lorg/apache/tapestry5/internal/plastic/MethodInvocationBundle;
INVOKESPECIAL com/proquest/apps/onesearch/components/PageLayoutBasic$Invocation_getPage_123876a5ccf1f215.<init> (Ljava/lang/Object;Lorg/apache/tapestry5/plastic/InstanceContext;Lorg/apache/tapestry5/internal/plastic/MethodInvocationBundle;)V
L0
DUP
ASTORE 1
INVOKEVIRTUAL org/apache/tapestry5/internal/plastic/AbstractMethodInvocation.proceed ()Lorg/apache/tapestry5/plastic/MethodInvocation;
ALOAD 1
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic$Invocation_getPage_123876a5ccf1f215.returnValue : Lorg/apache/tapestry5/runtime/Component;
ARETURN
L1
LOCALVARIABLE var0 Lcom/proquest/apps/onesearch/components/PageLayoutBasic$Invocation_getPage_123876a5ccf1f215; L0 L1 1
MAXSTACK = 1
MAXLOCALS = 1
... but the bytecode for the advised method is not instrumented:
public advised$getPage_123876a5ccf1f216()Lorg/apache/tapestry5/runtime/Component;
@Lorg/apache/tapestry5/annotations/Cached;()
ALOAD 0
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.resources : Lorg/apache/tapestry5/ComponentResources;
INVOKEINTERFACE org/apache/tapestry5/ComponentResources.getContainer ()Lorg/apache/tapestry5/runtime/Component;
ARETURN
MAXSTACK = 1
MAXLOCALS = 1
... even though the necessary field conduit support method is present:
// access flags 0x1010
final getfieldvalue_resources()Lorg/apache/tapestry5/ComponentResources;
ALOAD 0
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.resources_FieldConduit : Lorg/apache/tapestry5/plastic/FieldConduit;
ALOAD 0
ALOAD 0
GETFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.instanceContext : Lorg/apache/tapestry5/plastic/InstanceContext;
INVOKEINTERFACE org/apache/tapestry5/plastic/FieldConduit.get (Ljava/lang/Object;Lorg/apache/tapestry5/plastic/InstanceContext;)Ljava/lang/Object;
CHECKCAST org/apache/tapestry5/ComponentResources
DUP
ALOAD 0
SWAP
PUTFIELD com/proquest/apps/onesearch/components/PageLayoutBasic.resources : Lorg/apache/tapestry5/ComponentResources;
ARETURN
MAXSTACK = 0
MAXLOCALS = 0
... also, looking at the real class, from the client, as transformed, many other methods containing references to the field are being transformed.
Attachments
Attachments
Issue Links
- is related to
-
TAP5-1979 Changing the implementation of a method after adding method advice does not work; the original implementation remains
- Closed