You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2013/12/04 21:33:06 UTC

svn commit: r1547898 - in /commons/proper/beanutils/trunk/src: main/java/org/apache/commons/beanutils/PropertyUtils.java main/java/org/apache/commons/beanutils/PropertyUtilsBean.java test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java

Author: oheger
Date: Wed Dec  4 20:33:06 2013
New Revision: 1547898

URL: http://svn.apache.org/r1547898
Log:
Added a new resetBeanIntrospectors() method.

This method completes BEANUTILS-425 by a means to reset introspection to its
initial state. The test case for PropertyUtils has been made more robust
against potential failures caused by randomized execution order.

Modified:
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtils.java?rev=1547898&r1=1547897&r2=1547898&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtils.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtils.java Wed Dec  4 20:33:06 2013
@@ -156,6 +156,16 @@ public class PropertyUtils {
     }
 
     /**
+     * Resets the registered {@link BeanIntrospector} objects to the initial default
+     * state.
+     *
+     * @since 1.9
+     */
+    public static void resetBeanIntrospectors() {
+        PropertyUtilsBean.getInstance().resetBeanIntrospectors();
+    }
+
+    /**
      * Adds a <code>BeanIntrospector</code>. This object is invoked when the
      * property descriptors of a class need to be obtained.
      *

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java?rev=1547898&r1=1547897&r2=1547898&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java Wed Dec  4 20:33:06 2013
@@ -134,7 +134,7 @@ public class PropertyUtilsBean {
         mappedDescriptorsCache = new WeakFastHashMap<Class<?>, FastHashMap>();
         mappedDescriptorsCache.setFast(true);
         introspectors = new CopyOnWriteArrayList<BeanIntrospector>();
-        introspectors.add(DefaultBeanIntrospector.INSTANCE);
+        resetBeanIntrospectors();
     }
 
 
@@ -180,6 +180,17 @@ public class PropertyUtilsBean {
     }
 
     /**
+     * Resets the {@link BeanIntrospector} objects registered at this instance. After this
+     * method was called, only the default {@code BeanIntrospector} is registered.
+     *
+     * @since 1.9
+     */
+    public final void resetBeanIntrospectors() {
+        introspectors.clear();
+        introspectors.add(DefaultBeanIntrospector.INSTANCE);
+    }
+
+    /**
      * Adds a <code>BeanIntrospector</code>. This object is invoked when the
      * property descriptors of a class need to be obtained.
      *

Modified: commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java?rev=1547898&r1=1547897&r2=1547898&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java (original)
+++ commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java Wed Dec  4 20:33:06 2013
@@ -219,6 +219,7 @@ public class PropertyUtilsTestCase exten
         BasicDynaBean nestedDynaBean = new BasicDynaBean(dynaClass);
         nestedDynaBean.set("nestedBean", bean);
         bean.setNestedDynaBean(nestedDynaBean);
+        PropertyUtils.clearDescriptors();
     }
 
 
@@ -244,6 +245,7 @@ public class PropertyUtilsTestCase exten
         beanPrivateSubclass = null;
         beanPublicSubclass = null;
 
+        PropertyUtils.resetBeanIntrospectors();
     }
 
 
@@ -4456,12 +4458,12 @@ public class PropertyUtilsTestCase exten
             // Only produce read-only property descriptors
             public void introspect(IntrospectionContext icontext)
                     throws IntrospectionException {
-                Set names = icontext.propertyNames();
+                Set<String> names = icontext.propertyNames();
                 PropertyDescriptor[] newDescs = new PropertyDescriptor[names
                         .size()];
                 int idx = 0;
-                for (Iterator it = names.iterator(); it.hasNext(); idx++) {
-                    String propName = (String) it.next();
+                for (Iterator<String> it = names.iterator(); it.hasNext(); idx++) {
+                    String propName = it.next();
                     PropertyDescriptor pd = icontext
                             .getPropertyDescriptor(propName);
                     newDescs[idx] = new PropertyDescriptor(pd.getName(),
@@ -4519,7 +4521,6 @@ public class PropertyUtilsTestCase exten
      * Tests whether a BeanIntrospector can be removed.
      */
     public void testRemoveBeanIntrospector() {
-        PropertyUtils.clearDescriptors();
         assertTrue(
                 "Wrong result",
                 PropertyUtils
@@ -4541,4 +4542,15 @@ public class PropertyUtilsTestCase exten
             // ok
         }
     }
+
+    /**
+     * Tests whether a reset of the registered BeanIntrospectors can be performed.
+     */
+    public void testResetBeanIntrospectors() {
+        assertTrue("Wrong result",
+                PropertyUtils.removeBeanIntrospector(DefaultBeanIntrospector.INSTANCE));
+        PropertyUtils.resetBeanIntrospectors();
+        PropertyDescriptor[] desc = PropertyUtils.getPropertyDescriptors(AlphaBean.class);
+        assertTrue("Got no descriptors", desc.length > 0);
+    }
 }