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.