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.