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);
+ }
}