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();