Author: jkuhnert
Date: Thu Feb 22 07:22:11 2007
New Revision: 510546

URL: http://svn.apache.org/viewvc?view=rev&rev=510546
Log:
Forgot to properly check parameterized generic type for matching exclusion 
filters during last refactor.

Modified:
    
tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
    
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java

Modified: 
tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java?view=diff&rev=510546&r1=510545&r2=510546
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
 Thu Feb 22 07:22:11 2007
@@ -51,7 +51,7 @@
             checkProxy(op, ps);
         }
     }
-
+    
     public Class extractPropertyType(Class type, String propertyName, 
IPropertySpecification ps) {
         
         try {
@@ -69,7 +69,6 @@
                         && 
TypeVariable.class.isAssignableFrom(m.getGenericReturnType().getClass())) {
                     
                     ps.setGeneric(true);
-                    
                     TypeVariable tvar = (TypeVariable)m.getGenericReturnType();
                     
                     // try to set the actual type
@@ -79,19 +78,19 @@
                         ParameterizedType ptype = 
(ParameterizedType)type.getGenericSuperclass();
                         if (ptype.getActualTypeArguments().length > 0) {
                             
+                            
ps.setCanProxy(canProxyType((Class)ptype.getActualTypeArguments()[0]));
                             ps.setType(((Class)tvar.getBounds()[0]).getName());
-                            return (Class)tvar.getBounds()[0];
-                            
-                            // 
ps.setType(((Class)ptype.getActualTypeArguments()[0]).getName());
                             
-                            //return (Class)ptype.getActualTypeArguments()[0];
+                            return (Class)tvar.getBounds()[0];
                         }
                     }
                     
                     return null;
                 } else if (m != null) {
                     
+                    ps.setCanProxy(canProxyType(m.getReturnType()));
                     ps.setType(m.getReturnType().getName());
+                    
                     return m.getReturnType();
                 }
                 
@@ -111,7 +110,6 @@
                         && 
TypeVariable.class.isAssignableFrom(genParam.getClass())) {
                     
                     TypeVariable tvar = (TypeVariable)genParam;
-                    
                     ps.setGeneric(true);
                     
                     if (type.getGenericSuperclass() != null) {
@@ -119,16 +117,15 @@
                         ParameterizedType ptype = 
(ParameterizedType)type.getGenericSuperclass();
                         if (ptype.getActualTypeArguments().length > 0) {
                             
+                            
ps.setCanProxy(canProxyType((Class)ptype.getActualTypeArguments()[0]));
                             ps.setType(((Class)tvar.getBounds()[0]).getName());
                             
                             return (Class)tvar.getBounds()[0];
-                            
//ps.setType(((Class)ptype.getActualTypeArguments()[0]).getName());
-                            
-                            //return (Class)ptype.getActualTypeArguments()[0];
                         }
                     }
                 }
                 
+                ps.setCanProxy(canProxyType(param));
                 ps.setType(param.getName());
                 return param;
             }
@@ -141,29 +138,31 @@
         return null;
     }
 
+    boolean canProxyType(Class type)
+    {
+        if (type == null)
+            return false;
+        
+        if (!EnhanceUtils.canProxyPropertyType(type))
+            return false;
+        
+        for (Annotation an : type.getAnnotations()) {
+            if (isExcluded(an)) {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
     void checkProxy(EnhancementOperation op, IPropertySpecification ps) {
         ps.setProxyChecked(true);
 
         if (!ps.isPersistent()) {
             return;
         }
-
-        Class propertyType = extractPropertyType(op.getBaseClass(), 
ps.getName(), ps);
-        if (propertyType == null) {
-            return;
-        }
-
-        if (!EnhanceUtils.canProxyPropertyType(propertyType)) {
-            return;
-        }
-
-        for (Annotation an : propertyType.getAnnotations()) {
-            if (isExcluded(an)) {
-                return;
-            }
-        }
-
-        ps.setCanProxy(true);
+        
+        extractPropertyType(op.getBaseClass(), ps.getName(), ps);
     }
     
     boolean isExcluded(Annotation annotation) {

Modified: 
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java?view=diff&rev=510546&r1=510545&r2=510546
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java
 Thu Feb 22 07:22:11 2007
@@ -113,6 +113,9 @@
     public void test_Type_Found()
     {
         ComponentPropertyProxyWorker worker = new 
ComponentPropertyProxyWorker();
+        List<String> exclude = new ArrayList<String>();
+        exclude.add("Entity");
+        worker.setExcludedPackages(exclude);
         
         IPropertySpecification prop = new PropertySpecification();
         prop.setName("value");
@@ -193,7 +196,7 @@
         assert prop != null;
         assert prop.isPersistent();
         assert prop.isProxyChecked();
-        assert prop.canProxy();
+        assert !prop.canProxy();
         
         assertEquals(p.getType(), Persistent.class.getName());
     }


Reply via email to