You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/07 23:17:04 UTC

svn commit: r1090020 - in /tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5: internal/plastic/InstructionBuilderImpl.java internal/plastic/PlasticClassImpl.java plastic/InstructionBuilder.java plastic/PlasticField.java

Author: hlship
Date: Thu Apr  7 21:17:04 2011
New Revision: 1090020

URL: http://svn.apache.org/viewvc?rev=1090020&view=rev
Log:
TAP5-853: Add new InstructionBuilder method for loading a PlasticField

Modified:
    tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java
    tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
    tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/InstructionBuilder.java
    tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticField.java

Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java?rev=1090020&r1=1090019&r2=1090020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java Thu Apr  7 21:17:04 2011
@@ -21,6 +21,7 @@ import org.apache.tapestry5.internal.pla
 import org.apache.tapestry5.plastic.InstructionBuilder;
 import org.apache.tapestry5.plastic.InstructionBuilderCallback;
 import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.plastic.SwitchCallback;
 import org.apache.tapestry5.plastic.TryCatchCallback;
 
@@ -253,6 +254,13 @@ public class InstructionBuilderImpl exte
         return this;
     }
 
+    public InstructionBuilder getField(PlasticField field)
+    {
+        check();
+
+        return getField(field.getPlasticClass().getClassName(), field.getName(), field.getTypeName());
+    }
+
     public InstructionBuilder putField(String className, String fieldName, String typeName)
     {
         check();

Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java?rev=1090020&r1=1090019&r2=1090020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java Thu Apr  7 21:17:04 2011
@@ -269,12 +269,10 @@ public class PlasticClassImpl extends Lo
                 {
                     // Load the field
 
-                    String delegateType = field.getTypeName();
-
-                    builder.loadThis().getField(className, field.getName(), delegateType);
+                    builder.loadThis().getField(field);
                     builder.loadArguments();
 
-                    invokeDelegateAndReturnResult(builder, delegateType);
+                    invokeDelegateAndReturnResult(builder, field.getTypeName());
                 }
             });
 
@@ -510,6 +508,13 @@ public class PlasticClassImpl extends Lo
             return this.node.name.compareTo(o.node.name);
         }
 
+        public PlasticClass getPlasticClass()
+        {
+            check();
+
+            return PlasticClassImpl.this;
+        }
+
         public FieldHandle getHandle()
         {
             check();
@@ -701,12 +706,12 @@ public class PlasticClassImpl extends Lo
 
             if (accessType != PropertyAccessType.WRITE_ONLY)
             {
-                introduceMethod(new MethodDescription(getTypeName(), "get" + capitalized, new String[0]))
-                        .changeImplementation(new InstructionBuilderCallback()
+                introduceMethod(new MethodDescription(getTypeName(), "get" + capitalized, null)).changeImplementation(
+                        new InstructionBuilderCallback()
                         {
                             public void doBuild(InstructionBuilder builder)
                             {
-                                builder.loadThis().getField(className, node.name, getTypeName()).returnResult();
+                                builder.loadThis().getField(PlasticFieldImpl.this).returnResult();
                             }
                         });
             }

Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/InstructionBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/InstructionBuilder.java?rev=1090020&r1=1090019&r2=1090020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/InstructionBuilder.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/InstructionBuilder.java Thu Apr  7 21:17:04 2011
@@ -128,7 +128,8 @@ public interface InstructionBuilder
     InstructionBuilder unboxPrimitive(String typeName);
 
     /**
-     * Loads an instance field onto the stack. The object containing the field should already be loaded onto the stack.
+     * Loads an instance field onto the stack. The object containing the field should already be loaded onto the stack
+     * (usually, via {@link #loadThis()}).
      * 
      * @param className
      *            name of class containing the field
@@ -141,6 +142,20 @@ public interface InstructionBuilder
     InstructionBuilder getField(String className, String fieldName, String typeName);
 
     /**
+     * Loads an instance field onto the stack. The plastic class instance containing the field should already be loaded
+     * onto the stack (usually, via {@link #loadThis()}).
+     * 
+     * @param className
+     *            name of class containing the field
+     * @param fieldName
+     *            name of the field
+     * @param typeName
+     *            type of field
+     */
+    @Opcodes("GETFIELD")
+    InstructionBuilder getField(PlasticField field);
+
+    /**
      * Loads a field onto the stack. This version is used when the
      * field type is known at build time, rather than discovered at runtime.
      * 

Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticField.java?rev=1090020&r1=1090019&r2=1090020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticField.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/plastic/PlasticField.java Thu Apr  7 21:17:04 2011
@@ -22,6 +22,9 @@ package org.apache.tapestry5.plastic;
  */
 public interface PlasticField extends AnnotationAccess
 {
+    /** Returns the class containing this field. */
+    PlasticClass getPlasticClass();
+    
     /**
      * Returns a handle that can be used to directly access a private field of a
      * transformed class instance.