Author: hlship
Date: Tue Jun 10 14:51:09 2008
New Revision: 666338

URL: http://svn.apache.org/viewvc?rev=666338&view=rev
Log:
TAPESTRY-2448: When a bean class inherits properties from a base class, field 
annotations of the base class properties are not visible

Modified:
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java?rev=666338&r1=666337&r2=666338&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
 Tue Jun 10 14:51:09 2008
@@ -165,15 +165,24 @@
             // are in the same class (i.e., that we don't have a getter 
exposing a protected field inherted
             // from a base class, or some other oddity).
 
-            for (Field f : getBeanType().getDeclaredFields())
+            Class cursor = getBeanType();
+
+            out:
+            while (cursor != null)
             {
-                if (f.getName().equalsIgnoreCase(name))
+                for (Field f : cursor.getDeclaredFields())
                 {
-                    field = f;
-                    break;
+                    if (f.getName().equalsIgnoreCase(name))
+                    {
+                        field = f;
+                        break out;
+                    }
                 }
+
+                cursor = cursor.getSuperclass();
             }
 
+
             fieldCheckedFor = true;
         }
 

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImplTest.java?rev=666338&r1=666337&r2=666338&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImplTest.java
 Tue Jun 10 14:51:09 2008
@@ -72,6 +72,11 @@
         }
     }
 
+    public static class BeanSubclass extends Bean
+    {
+
+    }
+
     public static class ExceptionBean
     {
         public boolean getFailure()
@@ -468,6 +473,21 @@
         assertEquals(dt.value(), "fred");
     }
 
+    /**
+     * TAPESTRY-2448
+     */
+    @Test
+    public void get_annotation_will_read_inherited_field()
+    {
+        PropertyAdapter pa = 
access.getAdapter(BeanSubclass.class).getPropertyAdapter("value");
+
+        DataType dt = pa.getAnnotation(DataType.class);
+
+        assertNotNull(dt);
+        assertEquals(dt.value(), "fred");
+
+    }
+
     @Test
     public void field_annotation_overridden_by_getter_annotation()
     {


Reply via email to