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 2010/01/26 17:03:11 UTC
svn commit: r903295 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/services/
test/java/org/apache/tapestry5/internal/services/
Author: hlship
Date: Tue Jan 26 16:03:10 2010
New Revision: 903295
URL: http://svn.apache.org/viewvc?rev=903295&view=rev
Log:
Move field injection methods from ClassTransformation to TransformField
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetInjectionProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetInjectionProviderTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetInjectionProvider.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetInjectionProvider.java Tue Jan 26 16:03:10 2010
@@ -27,6 +27,7 @@
import org.apache.tapestry5.services.ClassTransformation;
import org.apache.tapestry5.services.ComponentValueProvider;
import org.apache.tapestry5.services.InjectionProvider;
+import org.apache.tapestry5.services.TransformField;
/**
* Performs injection of assets, based on the presence of the {@link Path} annotation. This is more
@@ -48,7 +49,9 @@
public boolean provideInjection(String fieldName, Class fieldType, ObjectLocator locator,
ClassTransformation transformation, MutableComponentModel componentModel)
{
- Path path = transformation.getFieldAnnotation(fieldName, Path.class);
+ TransformField field = transformation.getField(fieldName);
+
+ Path path = field.getAnnotation(Path.class);
if (path == null)
return false;
@@ -68,7 +71,7 @@
}
};
- transformation.injectFieldIndirect(fieldName, provider);
+ field.injectIndirect(provider);
return true;
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java Tue Jan 26 16:03:10 2010
@@ -86,7 +86,7 @@
if (provider == null)
return false;
- transformation.injectFieldIndirect(fieldName, provider);
+ transformation.getField(fieldName).injectIndirect(provider);
return true;
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java Tue Jan 26 16:03:10 2010
@@ -135,6 +135,8 @@
{
private final CtField field;
+ private final CtClass fieldType;
+
private final String name;
private final String type;
@@ -157,7 +159,8 @@
try
{
- type = field.getType().getName();
+ fieldType = field.getType();
+ type = fieldType.getName();
}
catch (NotFoundException ex)
{
@@ -218,6 +221,11 @@
return claimTag != null;
}
+ public int getModifiers()
+ {
+ return field.getModifiers();
+ }
+
public void remove()
{
if (removed)
@@ -310,12 +318,35 @@
makeReadOnly(name);
}
- @Override
public <T> void assignIndirect(TransformMethodSignature signature,
ComponentValueProvider<T> provider)
{
assignIndirect(getMethod(signature), provider);
}
+
+ public void inject(Object value)
+ {
+ failIfFrozen();
+
+ addInjectToConstructor(name, fieldType, value);
+
+ makeReadOnly(name);
+ }
+
+ public <T> void injectIndirect(ComponentValueProvider<T> provider)
+ {
+ Defense.notNull(provider, "provider");
+
+ failIfFrozen();
+
+ String argName = addConstructorArg(providerType, provider);
+
+ extendConstructor(String.format(" %s = (%s) %s.get(%s);", name, type, argName,
+ resourcesFieldName));
+
+ makeReadOnly(name);
+ }
+
}
private final Map<TransformMethodSignature, TransformMethodImpl> methods = CollectionFactory
@@ -1336,16 +1367,7 @@
public int getFieldModifiers(String fieldName)
{
- failIfFrozen();
-
- try
- {
- return ctClass.getDeclaredField(fieldName).getModifiers();
- }
- catch (NotFoundException ex)
- {
- throw new RuntimeException(ex);
- }
+ return getField(fieldName).getModifiers();
}
private CtClass getFieldCtType(String fieldName)
@@ -1564,34 +1586,7 @@
public void injectField(String fieldName, Object value)
{
- Defense.notBlank(fieldName, "fieldName");
-
- failIfFrozen();
-
- CtClass type = getFieldCtType(fieldName);
-
- addInjectToConstructor(fieldName, type, value);
-
- makeReadOnly(fieldName);
- }
-
- public <T> void injectFieldIndirect(String fieldName, ComponentValueProvider<T> provider)
- {
- Defense.notBlank(fieldName, "fieldName");
- Defense.notNull(provider, "provider");
-
- failIfFrozen();
-
- CtClass type = getFieldCtType(fieldName);
-
- String argName = addConstructorArg(providerType, provider);
-
- extendConstructor(String.format(" %s = (%s) %s.get(%s);", fieldName, type.getName(),
- argName, resourcesFieldName));
-
- // Add the provider to the constructor
-
- makeReadOnly(fieldName);
+ getField(fieldName).inject(value);
}
private CtClass convertNameToCtType(String type) throws NotFoundException
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java Tue Jan 26 16:03:10 2010
@@ -312,7 +312,7 @@
ComponentValueProvider<T> provider);
/**
- * Converts and <em>existing</em> field into a read only field whose value is the provided
+ * Converts an <em>existing</em> field into a read only field whose value is the provided
* value. This is used
* when converting an
* existing field into a read-only injected value.
@@ -321,26 +321,11 @@
* name of field to convert
* @param value
* the value provided by the field
+ * @deprecated Use {@link TransformField#inject(Object)} instead
*/
void injectField(String fieldName, Object value);
/**
- * Like {@link #injectField(String, Object)}, except that the value to be injected is obtained
- * from
- * a {@link ComponentValueProvider}. It is assumed that the provider will return an object
- * assignable to the field.
- *
- * @param <T>
- * type of field
- * @param fieldName
- * name of field to convert
- * @param provider
- * provides the value to be assigned to the field
- * @since 5.2.0
- */
- <T> void injectFieldIndirect(String fieldName, ComponentValueProvider<T> provider);
-
- /**
* Transforms the class to implement the indicated interface. If the class (or its super class)
* does not already
* implement the interface, then the interface is added, and default implementations of any
@@ -454,6 +439,8 @@
* name. Replacements
* do not occur in methods added via {@link #addMethod(TransformMethodSignature, String)} or
* {@link #extendMethod(TransformMethodSignature, String)}.
+ *
+ * @deprecated Use {@link TransformField#replaceAccess(ComponentValueProvider) instead
*/
void replaceReadAccess(String fieldName, String methodName);
@@ -463,6 +450,8 @@
* should take a single parameter of the same type as the field. Replacements do not occur in
* methods added via {@link #addMethod(TransformMethodSignature, String)} or
* {@link #extendMethod(TransformMethodSignature, String)}.
+ *
+ * @deprecated Use {@link TransformField#replaceAccess(ComponentValueProvider) instead
*/
void replaceWriteAccess(String fieldName, String methodName);
@@ -480,21 +469,20 @@
/**
* Converts a type name into a corresponding class (possibly, a transformed class). Primitive
- * type names are
- * returned as wrapper types.
+ * type names are returned as wrapper types.
*/
-
Class toClass(String type);
/**
* Returns a logger, based on the class name being transformed, to which warnings or errors
- * concerning the class
- * being transformed may be logged.
+ * concerning the class being transformed may be logged.
*/
Logger getLogger();
/**
* Returns the modifiers for the named field.
+ *
+ * @deprecated Use {@link TransformField#getModifiers()} instead
*/
int getFieldModifiers(String fieldName);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java Tue Jan 26 16:03:10 2010
@@ -102,4 +102,30 @@
* if the field has already been marked for deletion
*/
void remove();
+
+ /** Returns the modifiers for the field. */
+ int getModifiers();
+
+ /**
+ * Converts this field into a read only field whose value is the provided
+ * value. This is used when converting an existing field into a read-only injected value.
+ *
+ * @param value
+ * the value provided by the field
+ */
+ void inject(Object value);
+
+ /**
+ * Like {@link #inject(Object)}, except that the value to be injected is obtained
+ * from a {@link ComponentValueProvider}. It is assumed that the provider will return an object
+ * assignable to the field.
+ *
+ * @param <T>
+ * type of field
+ * @param provider
+ * provides the value to be assigned to the field
+ * @since 5.2.0
+ */
+ <T> void injectIndirect(ComponentValueProvider<T> provider);
+
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetInjectionProviderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetInjectionProviderTest.java?rev=903295&r1=903294&r2=903295&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetInjectionProviderTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetInjectionProviderTest.java Tue Jan 26 16:03:10 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -22,6 +22,7 @@
import org.apache.tapestry5.services.AssetSource;
import org.apache.tapestry5.services.ClassTransformation;
import org.apache.tapestry5.services.InjectionProvider;
+import org.apache.tapestry5.services.TransformField;
import org.testng.annotations.Test;
public class AssetInjectionProviderTest extends InternalBaseTestCase
@@ -34,10 +35,12 @@
ObjectLocator locator = mockObjectLocator();
ClassTransformation ct = mockClassTransformation();
MutableComponentModel model = mockMutableComponentModel();
+ TransformField field = newMock(TransformField.class);
String fieldName = "myField";
- train_getFieldAnnotation(ct, fieldName, Path.class, null);
+ expect(ct.getField(fieldName)).andReturn(field);
+ expect(field.getAnnotation(Path.class)).andReturn(null);
replay();