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/11/08 22:08:33 UTC

svn commit: r1540186 [1/6] - in /commons/proper/beanutils/trunk: ./ src/changes/ src/main/java/org/apache/commons/beanutils/ src/main/java/org/apache/commons/beanutils/converters/ src/main/java/org/apache/commons/beanutils/locale/ src/test/java/org/apa...

Author: oheger
Date: Fri Nov  8 21:08:30 2013
New Revision: 1540186

URL: http://svn.apache.org/r1540186
Log:
Merged java5 branch back into trunk.

Added:
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BaseDynaBeanMapDecorator.java
      - copied unchanged from r1540184, commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/BaseDynaBeanMapDecorator.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/DynaBeanPropertyMapDecorator.java
      - copied unchanged from r1540184, commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanPropertyMapDecorator.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/StringConverterTestCase.java
      - copied unchanged from r1540184, commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/StringConverterTestCase.java
Modified:
    commons/proper/beanutils/trunk/   (props changed)
    commons/proper/beanutils/trunk/pom.xml
    commons/proper/beanutils/trunk/src/changes/changes.xml
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanComparator.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanMap.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean2.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConstructorUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ContextClassLoaderLocal.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean2.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/Converter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/DynaProperty.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/JDBCDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/LazyDynaBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/LazyDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/LazyDynaList.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/LazyDynaMap.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/MethodUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/MutableDynaClass.java
    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/main/java/org/apache/commons/beanutils/ResultSetDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ResultSetIterator.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/RowSetDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/WeakFastHashMap.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/WrapDynaClass.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/AbstractConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/BigDecimalConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/BigIntegerConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/BooleanConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/ByteConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/CalendarConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/ClassConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/ConverterFacade.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/DateConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/DoubleConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/FileConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/FloatConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/IntegerConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/LongConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/NumberConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/ShortConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/SqlDateConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/SqlTimeConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/SqlTimestampConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/StringConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/converters/URLConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/BaseLocaleConverter.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/LocaleBeanUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/LocaleConvertUtils.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.java
    commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/locale/LocaleConverter.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/BeanComparatorTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/BeanMapTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/BeanUtilsBenchCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/BeanUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/BeanificationTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/ConstructorUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/ConvertUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/DynaBeanMapDecoratorTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/DynaBeanUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/DynaPropertyUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/DynaResultSetTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/DynaRowSetTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/ExtendMapBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/IndexedPropertyTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/IndexedTestBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/LazyDynaBeanTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/LazyDynaListTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/LazyDynaMapTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/MappedPropertyTestBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/MappedPropertyTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsBenchCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropertyUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/PropsFirstPropertyUtilsBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/TestBean.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/TestResultSet.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/TestResultSetMetaData.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/ThrowExceptionConverter.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/WrapDynaBeanTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira157TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira298TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira339TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira347TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira357TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira381TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira422TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira61TestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/other/Jira18BeanFactory.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/other/Jira61BeanFactory.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/BigDecimalConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/BigIntegerConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/BooleanConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ByteConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/CalendarConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ClassConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ClassReloader.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ClassReloaderTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/DateConverterTestBase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/DateConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/DoubleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/FileConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/FloatConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/IntegerConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/LongConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/MemoryTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/NumberConverterTestBase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/ShortConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/converters/URLConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/LocaleBeanificationTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/LocaleConvertUtilsTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/BaseLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/ByteLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/FloatLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/LongLocaleConverterTestCase.java
    commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/locale/converters/ShortLocaleConverterTestCase.java

Propchange: commons/proper/beanutils/trunk/
------------------------------------------------------------------------------
    svn:mergeinfo = /commons/proper/beanutils/branches/java5:1532038-1540184

Modified: commons/proper/beanutils/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/pom.xml?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/pom.xml (original)
+++ commons/proper/beanutils/trunk/pom.xml Fri Nov  8 21:08:30 2013
@@ -308,6 +308,8 @@
                   -  so we will just exclude it until someone comes up with a solution.
                 -->
                 <exclude>**/*MemoryTestCase.java</exclude>
+                <!-- Temporarily disabled long-running test case -->
+                <exclude>**/MemoryLeakTestCase.java</exclude>
               </excludes>
 
               <!-- Configure Logging -->

Modified: commons/proper/beanutils/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/changes/changes.xml?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/changes/changes.xml (original)
+++ commons/proper/beanutils/trunk/src/changes/changes.xml Fri Nov  8 21:08:30 2013
@@ -40,6 +40,25 @@ The <action> type attribute can be add,u
   <body>
 
     <release version="1.9.0" date="tba" description="Upgrade to Java 5 including generics where possible">
+      <action dev="oheger" type="update" issue="BEANUTILS-452" >
+         Add generics
+      </action>
+      <action dev="oheger" type="update" issue="BEANUTILS-449" >
+         LocaleConverters do not take the target type into account
+      </action>
+      <action dev="oheger" type="update" issue="BEANUTILS-448" >
+         LocaleConverters do not check their default value
+      </action>
+      <action dev="oheger" type="update" issue="BEANUTILS-447" >
+         LazyDynaList.toArray() is not conform to the contract defined by the
+         Collection interface
+      </action>
+      <action dev="oheger" type="update" issue="BEANUTILS-446" >
+         Some of the converters ignore the passed in target type
+      </action>
+      <action dev="oheger" type="update" issue="BEANUTILS-445" >
+         Converters can return an invalid result object if a default value is set
+      </action>
       <action dev="britter" type="update" issue="BEANUTILS-436" >
          Replace package.html with package-info.java
       </action>

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaBean.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaBean.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaBean.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaBean.java Fri Nov  8 21:08:30 2013
@@ -73,10 +73,10 @@ public class BasicDynaBean implements Dy
     /**
      * The set of property values for this DynaBean, keyed by property name.
      */
-    protected HashMap values = new HashMap();
+    protected HashMap<String, Object> values = new HashMap<String, Object>();
 
     /** Map decorator for this DynaBean */
-    private transient Map mapDecorator;
+    private transient Map<String, Object> mapDecorator;
 
     /**
      * Return a Map representation of this DynaBean.
@@ -88,11 +88,11 @@ public class BasicDynaBean implements Dy
      * @return a Map representation of this DynaBean
      * @since 1.8.0
      */
-    public Map getMap() {
+    public Map<String, Object> getMap() {
 
         // cache the Map
         if (mapDecorator == null) {
-            mapDecorator = new DynaBeanMapDecorator(this);
+            mapDecorator = new DynaBeanPropertyMapDecorator(this);
         }
         return mapDecorator;
 
@@ -120,7 +120,7 @@ public class BasicDynaBean implements Dy
             throw new NullPointerException
                     ("No mapped value for '" + name + "(" + key + ")'");
         } else if (value instanceof Map) {
-            return (((Map) value).containsKey(key));
+            return (((Map<?, ?>) value).containsKey(key));
         } else {
             throw new IllegalArgumentException
                     ("Non-mapped property for '" + name + "(" + key + ")'");
@@ -147,7 +147,7 @@ public class BasicDynaBean implements Dy
         }
 
         // Return a null value for a non-primitive property
-        Class type = getDynaProperty(name).getType();
+        Class<?> type = getDynaProperty(name).getType();
         if (!type.isPrimitive()) {
             return (value);
         }
@@ -201,7 +201,7 @@ public class BasicDynaBean implements Dy
         } else if (value.getClass().isArray()) {
             return (Array.get(value, index));
         } else if (value instanceof List) {
-            return ((List) value).get(index);
+            return ((List<?>) value).get(index);
         } else {
             throw new IllegalArgumentException
                     ("Non-indexed property for '" + name + "[" + index + "]'");
@@ -230,7 +230,7 @@ public class BasicDynaBean implements Dy
             throw new NullPointerException
                     ("No mapped value for '" + name + "(" + key + ")'");
         } else if (value instanceof Map) {
-            return (((Map) value).get(key));
+            return (((Map<?, ?>) value).get(key));
         } else {
             throw new IllegalArgumentException
                     ("Non-mapped property for '" + name + "(" + key + ")'");
@@ -270,7 +270,7 @@ public class BasicDynaBean implements Dy
             throw new NullPointerException
                     ("No mapped value for '" + name + "(" + key + ")'");
         } else if (value instanceof Map) {
-            ((Map) value).remove(key);
+            ((Map<?, ?>) value).remove(key);
         } else {
             throw new IllegalArgumentException
                     ("Non-mapped property for '" + name + "(" + key + ")'");
@@ -338,7 +338,11 @@ public class BasicDynaBean implements Dy
             Array.set(prop, index, value);
         } else if (prop instanceof List) {
             try {
-                ((List) prop).set(index, value);
+                @SuppressWarnings("unchecked")
+                // This is safe to cast because list properties are always
+                // of type Object
+                List<Object> list = (List<Object>) prop;
+                list.set(index, value);
             } catch (ClassCastException e) {
                 throw new ConversionException(e.getMessage());
             }
@@ -371,7 +375,11 @@ public class BasicDynaBean implements Dy
             throw new NullPointerException
                     ("No mapped value for '" + name + "(" + key + ")'");
         } else if (prop instanceof Map) {
-            ((Map) prop).put(key, value);
+            @SuppressWarnings("unchecked")
+            // This is safe to cast because mapped properties are always
+            // maps of types String -> Object
+            Map<String, Object> map = (Map<String, Object>) prop;
+            map.put(key, value);
         } else {
             throw new IllegalArgumentException
                     ("Non-mapped property for '" + name + "(" + key + ")'");
@@ -412,7 +420,7 @@ public class BasicDynaBean implements Dy
      * @return <code>true</code> if the source class is assignable to the
      * destination class, otherwise <code>false</code>
      */
-    protected boolean isAssignable(Class dest, Class source) {
+    protected boolean isAssignable(Class<?> dest, Class<?> source) {
 
         if (dest.isAssignableFrom(source) ||
                 ((dest == Boolean.TYPE) && (source == Boolean.class)) ||

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaClass.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaClass.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaClass.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BasicDynaClass.java Fri Nov  8 21:08:30 2013
@@ -58,7 +58,7 @@ public class BasicDynaClass implements D
      * @param name Name of this DynaBean class
      * @param dynaBeanClass The implementation class for new instances
      */
-    public BasicDynaClass(String name, Class dynaBeanClass) {
+    public BasicDynaClass(String name, Class<?> dynaBeanClass) {
 
         this(name, dynaBeanClass, null);
 
@@ -72,7 +72,7 @@ public class BasicDynaClass implements D
      * @param dynaBeanClass The implementation class for new intances
      * @param properties Property descriptors for the supported properties
      */
-    public BasicDynaClass(String name, Class dynaBeanClass,
+    public BasicDynaClass(String name, Class<?> dynaBeanClass,
                           DynaProperty[] properties) {
 
         super();
@@ -97,14 +97,14 @@ public class BasicDynaClass implements D
      * The constructor of the <code>dynaBeanClass</code> that we will use
      * for creating new instances.
      */
-    protected transient Constructor constructor = null;
+    protected transient Constructor<?> constructor = null;
 
 
     /**
      * The method signature of the constructor we will use to create
      * new DynaBean instances.
      */
-    protected static Class[] constructorTypes = { DynaClass.class };
+    protected static Class<?>[] constructorTypes = { DynaClass.class };
 
 
     /**
@@ -118,7 +118,7 @@ public class BasicDynaClass implements D
      * The <code>DynaBean</code> implementation class we will use for
      * creating new instances.
      */
-    protected Class dynaBeanClass = BasicDynaBean.class;
+    protected Class<?> dynaBeanClass = BasicDynaBean.class;
 
 
     /**
@@ -138,7 +138,7 @@ public class BasicDynaClass implements D
      * keyed by the property name.  Individual descriptor instances will
      * be the same instances as those in the <code>properties</code> list.
      */
-    protected HashMap propertiesMap = new HashMap();
+    protected HashMap<String, DynaProperty> propertiesMap = new HashMap<String, DynaProperty>();
 
 
     // ------------------------------------------------------ DynaClass Methods
@@ -175,7 +175,7 @@ public class BasicDynaClass implements D
             throw new IllegalArgumentException
                     ("No property name specified");
         }
-        return ((DynaProperty) propertiesMap.get(name));
+        return propertiesMap.get(name);
 
     }
 
@@ -237,7 +237,7 @@ public class BasicDynaClass implements D
      *
      * @return The class of the {@link DynaBean}
      */
-    public Class getDynaBeanClass() {
+    public Class<?> getDynaBeanClass() {
 
         return (this.dynaBeanClass);
 
@@ -257,7 +257,7 @@ public class BasicDynaClass implements D
      * @exception IllegalArgumentException if the specified Class does not
      *  implement the <code>DynaBean</code> interface
      */
-    protected void setDynaBeanClass(Class dynaBeanClass) {
+    protected void setDynaBeanClass(Class<?> dynaBeanClass) {
 
         // Validate the argument type specified
         if (dynaBeanClass.isInterface()) {

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanComparator.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanComparator.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanComparator.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanComparator.java Fri Nov  8 21:08:30 2013
@@ -17,9 +17,10 @@
 
 package org.apache.commons.beanutils;
 
-import java.lang.reflect.InvocationTargetException;
 import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Comparator;
+
 import org.apache.commons.collections.comparators.ComparableComparator;
 
 /**
@@ -35,14 +36,20 @@ import org.apache.commons.collections.co
  * specified in the constructor. If you are comparing two beans based
  * on a property that could contain "null" values, a suitable <code>Comparator</code>
  * or <code>ComparatorChain</code> should be supplied in the constructor.
+ * Note that the passed in {@code Comparator} must be able to handle the
+ * passed in objects. Because the type of the property to be compared is not
+ * known at compile time no type checks can be performed by the compiler.
+ * Thus {@code ClassCastException} exceptions can be thrown if unexpected
+ * property values occur.
  * </p>
  *
+ * @param <B> the type of beans to be compared by this {@code Comparator}
  * @version $Id$
  */
-public class BeanComparator implements Comparator, Serializable {
+public class BeanComparator<B> implements Comparator<B>, Serializable {
 
     private String property;
-    private Comparator comparator;
+    private final Comparator<?> comparator;
 
     /**
      * <p>Constructs a Bean Comparator without a property set.
@@ -96,7 +103,7 @@ public class BeanComparator implements C
      * contains null values, a suitable comparator
      * may be supplied in this constructor.
      */
-    public BeanComparator( String property, Comparator comparator ) {
+    public BeanComparator( String property, Comparator<?> comparator ) {
         setProperty( property );
         if (comparator != null) {
             this.comparator = comparator;
@@ -132,7 +139,7 @@ public class BeanComparator implements C
      *
      * @return the Comparator being used to compare beans
      */
-    public Comparator getComparator() {
+    public Comparator<?> getComparator() {
         return comparator;
     }
 
@@ -145,17 +152,17 @@ public class BeanComparator implements C
      * @param  o2 Object The second bean to get data from to compare
      * @return int negative or positive based on order
      */
-    public int compare( Object o1, Object o2 ) {
+    public int compare( B o1, B o2 ) {
 
         if ( property == null ) {
             // compare the actual objects
-            return comparator.compare( o1, o2 );
+            return internalCompare( o1, o2 );
         }
 
         try {
             Object value1 = PropertyUtils.getProperty( o1, property );
             Object value2 = PropertyUtils.getProperty( o2, property );
-            return comparator.compare( value1, value2 );
+            return internalCompare( value1, value2 );
         }
         catch ( IllegalAccessException iae ) {
             throw new RuntimeException( "IllegalAccessException: " + iae.toString() );
@@ -184,7 +191,7 @@ public class BeanComparator implements C
             return false;
         }
 
-        final BeanComparator beanComparator = (BeanComparator) o;
+        final BeanComparator<?> beanComparator = (BeanComparator<?>) o;
 
         if (!comparator.equals(beanComparator.comparator)) {
             return false;
@@ -213,4 +220,20 @@ public class BeanComparator implements C
         result = comparator.hashCode();
         return result;
     }
+
+    /**
+     * Compares the given values using the internal {@code Comparator}.
+     * <em>Note</em>: This comparison cannot be performed in a type-safe way; so
+     * {@code ClassCastException} exceptions may be thrown.
+     *
+     * @param val1 the first value to be compared
+     * @param val2 the second value to be compared
+     * @return the result of the comparison
+     */
+    private int internalCompare(Object val1, Object val2) {
+        @SuppressWarnings("rawtypes")
+        // to make the compiler happy
+        Comparator c = comparator;
+        return c.compare(val1, val2);
+    }
 }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanMap.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanMap.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanMap.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanMap.java Fri Nov  8 21:08:30 2013
@@ -33,10 +33,9 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections.list.UnmodifiableList;
+import org.apache.commons.collections.Transformer;
 import org.apache.commons.collections.keyvalue.AbstractMapEntry;
 import org.apache.commons.collections.set.UnmodifiableSet;
-import org.apache.commons.collections.Transformer;
 
 /**
  * An implementation of Map for JavaBeans which uses introspection to
@@ -47,7 +46,7 @@ import org.apache.commons.collections.Tr
  *
  * @version $Id$
  */
-public class BeanMap extends AbstractMap implements Cloneable {
+public class BeanMap extends AbstractMap<Object, Object> implements Cloneable {
 
     private transient Object bean;
 
@@ -499,8 +498,11 @@ public class BeanMap extends AbstractMap
      * @return BeanMap keys.  The Set returned by this method is not
      *        modifiable.
      */
+    @SuppressWarnings("unchecked")
+    // The set actually contains strings; however, because it cannot be
+    // modified there is no danger in selling it as Set<Object>
     @Override
-    public Set keySet() {
+    public Set<Object> keySet() {
         return UnmodifiableSet.decorate(readMethods.keySet());
     }
 
@@ -512,10 +514,10 @@ public class BeanMap extends AbstractMap
      * @return the unmodifiable set of mappings
      */
     @Override
-    public Set entrySet() {
-        return UnmodifiableSet.decorate(new AbstractSet() {
+    public Set<Map.Entry<Object, Object>> entrySet() {
+        return Collections.unmodifiableSet(new AbstractSet<Map.Entry<Object, Object>>() {
             @Override
-            public Iterator iterator() {
+            public Iterator<Map.Entry<Object, Object>> iterator() {
                 return entryIterator();
             }
             @Override
@@ -532,12 +534,12 @@ public class BeanMap extends AbstractMap
      *        modifiable.
      */
     @Override
-    public Collection values() {
-        ArrayList answer = new ArrayList( readMethods.size() );
-        for ( Iterator iter = valueIterator(); iter.hasNext(); ) {
+    public Collection<Object> values() {
+        ArrayList<Object> answer = new ArrayList<Object>( readMethods.size() );
+        for ( Iterator<Object> iter = valueIterator(); iter.hasNext(); ) {
             answer.add( iter.next() );
         }
-        return UnmodifiableList.decorate(answer);
+        return Collections.unmodifiableList(answer);
     }
 
 
@@ -551,7 +553,7 @@ public class BeanMap extends AbstractMap
      * @return  the type of the property, or <code>null</code> if no such
      *  property exists
      */
-    public Class getType(String name) {
+    public Class<?> getType(String name) {
         return types.get( name );
     }
 
@@ -562,7 +564,7 @@ public class BeanMap extends AbstractMap
      *
      * @return an iterator over the keys
      */
-    public Iterator keyIterator() {
+    public Iterator<String> keyIterator() {
         return readMethods.keySet().iterator();
     }
 
@@ -571,9 +573,9 @@ public class BeanMap extends AbstractMap
      *
      * @return an iterator over the values
      */
-    public Iterator valueIterator() {
-        final Iterator iter = keyIterator();
-        return new Iterator() {
+    public Iterator<Object> valueIterator() {
+        final Iterator<?> iter = keyIterator();
+        return new Iterator<Object>() {
             public boolean hasNext() {
                 return iter.hasNext();
             }
@@ -592,16 +594,20 @@ public class BeanMap extends AbstractMap
      *
      * @return an iterator over the entries
      */
-    public Iterator entryIterator() {
-        final Iterator iter = keyIterator();
-        return new Iterator() {
+    public Iterator<Map.Entry<Object, Object>> entryIterator() {
+        final Iterator<String> iter = keyIterator();
+        return new Iterator<Map.Entry<Object, Object>>() {
             public boolean hasNext() {
                 return iter.hasNext();
             }
-            public Object next() {
+            public Map.Entry<Object, Object> next() {
                 Object key = iter.next();
                 Object value = get(key);
-                return new Entry( BeanMap.this, key, value );
+                @SuppressWarnings("unchecked")
+                // This should not cause any problems; the key is actually a
+                // string, but it does no harm to expose it as Object
+                Map.Entry<Object, Object> tmpEntry = new Entry( BeanMap.this, key, value );
+                return tmpEntry;
             }
             public void remove() {
                 throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
@@ -857,7 +863,7 @@ public class BeanMap extends AbstractMap
      * @throws IllegalAccessException  never
      * @throws IllegalArgumentException  never
      */
-    protected Object convertType( Class newType, Object value )
+    protected Object convertType( Class<?> newType, Object value )
         throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 
         // try call constructor
@@ -884,7 +890,7 @@ public class BeanMap extends AbstractMap
      * @return a transformer that will convert strings into that type,
      *  or null if the given type is not a primitive type
      */
-    protected Transformer getTypeTransformer( Class aType ) {
+    protected Transformer getTypeTransformer( Class<?> aType ) {
         return typeTransformers.get( aType );
     }
 

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtils.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtils.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtils.java Fri Nov  8 21:08:30 2013
@@ -176,7 +176,7 @@ public class BeanUtils {
      *  property cannot be found
      * @see BeanUtilsBean#describe
      */
-    public static Map describe(Object bean)
+    public static Map<String, String> describe(Object bean)
             throws IllegalAccessException, InvocationTargetException,
             NoSuchMethodException {
 
@@ -425,7 +425,7 @@ public class BeanUtils {
      *  throws an exception
      * @see BeanUtilsBean#populate
      */
-    public static void populate(Object bean, Map properties)
+    public static void populate(Object bean, Map<String, ? extends Object> properties)
         throws IllegalAccessException, InvocationTargetException {
 
         BeanUtilsBean.getInstance().populate(bean, properties);
@@ -468,11 +468,13 @@ public class BeanUtils {
 
     /**
      * Create a cache.
+     * @param <K> the key type of the cache
+     * @param <V> the value type of the cache
      * @return a new cache
      * @since 1.8.0
      */
-    public static Map createCache() {
-        return new WeakFastHashMap();
+    public static <K, V> Map<K, V> createCache() {
+        return new WeakFastHashMap<K, V>();
     }
 
     /**
@@ -481,9 +483,9 @@ public class BeanUtils {
      * @return Whether it is fast or not.
      * @since 1.8.0
      */
-    public static boolean getCacheFast(Map map) {
+    public static boolean getCacheFast(Map<?, ?> map) {
         if (map instanceof WeakFastHashMap) {
-            return ((WeakFastHashMap)map).getFast();
+            return ((WeakFastHashMap<?, ?>) map).getFast();
         } else {
             return false;
         }
@@ -495,9 +497,9 @@ public class BeanUtils {
      * @param fast Whether it should be fast or not.
      * @since 1.8.0
      */
-    public static void setCacheFast(Map map, boolean fast) {
+    public static void setCacheFast(Map<?, ?> map, boolean fast) {
         if (map instanceof WeakFastHashMap) {
-            ((WeakFastHashMap)map).setFast(fast);
+            ((WeakFastHashMap<?, ?>)map).setFast(fast);
         }
     }
 }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean.java Fri Nov  8 21:08:30 2013
@@ -27,7 +27,6 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.commons.beanutils.expression.Resolver;
@@ -56,11 +55,11 @@ public class BeanUtilsBean {
     /**
      * Contains <code>BeanUtilsBean</code> instances indexed by context classloader.
      */
-    private static final ContextClassLoaderLocal
-            BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal() {
+    private static final ContextClassLoaderLocal<BeanUtilsBean>
+            BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal<BeanUtilsBean>() {
                         // Creates the default instance used when the context classloader is unavailable
                         @Override
-                        protected Object initialValue() {
+                        protected BeanUtilsBean initialValue() {
                             return new BeanUtilsBean();
                         }
                     };
@@ -73,7 +72,7 @@ public class BeanUtilsBean {
      * @return The (pseudo-singleton) BeanUtils bean instance
      */
     public static BeanUtilsBean getInstance() {
-        return (BeanUtilsBean) BEANS_BY_CLASSLOADER.get();
+        return BEANS_BY_CLASSLOADER.get();
     }
 
     /**
@@ -258,10 +257,11 @@ public class BeanUtilsBean {
                 }
             }
         } else if (orig instanceof Map) {
-            Iterator entries = ((Map) orig).entrySet().iterator();
-            while (entries.hasNext()) {
-                Map.Entry entry = (Map.Entry) entries.next();
-                String name = (String)entry.getKey();
+            @SuppressWarnings("unchecked")
+            // Map properties are always of type <String, Object>
+            Map<String, Object> propMap = (Map<String, Object>) orig;
+            for (Map.Entry<String, Object> entry : propMap.entrySet()) {
+                String name = entry.getKey();
                 if (getPropertyUtils().isWriteable(dest, name)) {
                     copyProperty(dest, name, entry.getValue());
                 }
@@ -370,7 +370,7 @@ public class BeanUtilsBean {
 
         // Declare local variables we will require
         String propName = resolver.getProperty(name); // Simple name of target property
-        Class type = null;                            // Java type of target property
+        Class<?> type = null;                         // Java type of target property
         int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
         String key = resolver.getKey(name);           // Mapped key value (if any)
 
@@ -381,7 +381,7 @@ public class BeanUtilsBean {
             if (dynaProperty == null) {
                 return; // Skip this property setter
             }
-            type = dynaProperty.getType();
+            type = dynaPropertyType(dynaProperty, value);
         } else {
             PropertyDescriptor descriptor = null;
             try {
@@ -479,20 +479,20 @@ public class BeanUtilsBean {
      * @exception NoSuchMethodException if an accessor method for this
      *  property cannot be found
      */
-    public Map describe(Object bean)
+    public Map<String, String> describe(Object bean)
             throws IllegalAccessException, InvocationTargetException,
             NoSuchMethodException {
 
         if (bean == null) {
         //            return (Collections.EMPTY_MAP);
-            return (new java.util.HashMap());
+            return (new java.util.HashMap<String, String>());
         }
 
         if (log.isDebugEnabled()) {
             log.debug("Describing bean: " + bean.getClass().getName());
         }
 
-        Map description = new HashMap();
+        Map<String, String> description = new HashMap<String, String>();
         if (bean instanceof DynaBean) {
             DynaProperty[] descriptors =
                 ((DynaBean) bean).getDynaClass().getDynaProperties();
@@ -503,7 +503,7 @@ public class BeanUtilsBean {
         } else {
             PropertyDescriptor[] descriptors =
                 getPropertyUtils().getPropertyDescriptors(bean);
-            Class clazz = bean.getClass();
+            Class<?> clazz = bean.getClass();
             for (int i = 0; i < descriptors.length; i++) {
                 String name = descriptors[i].getName();
                 if (getPropertyUtils().getReadMethod(clazz, descriptors[i]) != null) {
@@ -539,18 +539,16 @@ public class BeanUtilsBean {
         if (value == null) {
             return (null);
         } else if (value instanceof Collection) {
-            ArrayList values = new ArrayList();
-            Iterator items = ((Collection) value).iterator();
-            while (items.hasNext()) {
-                Object item = items.next();
+            ArrayList<String> values = new ArrayList<String>();
+            for (Object item : (Collection<?>) value) {
                 if (item == null) {
-                    values.add((String) null);
+                    values.add(null);
                 } else {
                     // convert to string using convert utils
                     values.add(getConvertUtils().convert(item));
                 }
             }
-            return ((String[]) values.toArray(new String[values.size()]));
+            return (values.toArray(new String[values.size()]));
         } else if (value.getClass().isArray()) {
             int n = Array.getLength(value);
             String[] results = new String[n];
@@ -799,7 +797,7 @@ public class BeanUtilsBean {
      * @exception InvocationTargetException if the property accessor method
      *  throws an exception
      */
-    public void populate(Object bean, Map properties)
+    public void populate(Object bean, Map<String, ? extends Object> properties)
         throws IllegalAccessException, InvocationTargetException {
 
         // Do nothing unless both arguments have been specified
@@ -812,12 +810,9 @@ public class BeanUtilsBean {
         }
 
         // Loop through the property name/value pairs to be set
-        Iterator entries = properties.entrySet().iterator();
-        while (entries.hasNext()) {
-
+        for(Map.Entry<String, ? extends Object> entry : properties.entrySet()) {
             // Identify the property name and value(s) to be assigned
-            Map.Entry entry = (Map.Entry)entries.next();
-            String name = (String) entry.getKey();
+            String name = entry.getKey();
             if (name == null) {
                 continue;
             }
@@ -912,7 +907,7 @@ public class BeanUtilsBean {
 
         // Declare local variables we will require
         String propName = resolver.getProperty(name); // Simple name of target property
-        Class type = null;                            // Java type of target property
+        Class<?> type = null;                         // Java type of target property
         int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
         String key = resolver.getKey(name);           // Mapped key value (if any)
 
@@ -923,7 +918,7 @@ public class BeanUtilsBean {
             if (dynaProperty == null) {
                 return; // Skip this property setter
             }
-            type = dynaProperty.getType();
+            type = dynaPropertyType(dynaProperty, value);
         } else if (target instanceof Map) {
             type = Object.class;
         } else if (target != null && target.getClass().isArray() && index >= 0) {
@@ -1070,7 +1065,7 @@ public class BeanUtilsBean {
      * @exception ConversionException if thrown by an underlying Converter
      * @since 1.8.0
      */
-    protected Object convert(Object value, Class type) {
+    protected Object convert(Object value, Class<?> type) {
         Converter converter = getConvertUtils().lookup(type);
         if (converter != null) {
             log.trace("        USING CONVERTER " + converter);
@@ -1091,7 +1086,7 @@ public class BeanUtilsBean {
      */
     private static Method getInitCauseMethod() {
         try {
-            Class[] paramsClasses = new Class[] { Throwable.class };
+            Class<?>[] paramsClasses = new Class<?>[] { Throwable.class };
             return Throwable.class.getMethod("initCause", paramsClasses);
         } catch (NoSuchMethodException e) {
             Log log = LogFactory.getLog(BeanUtils.class);
@@ -1107,4 +1102,20 @@ public class BeanUtilsBean {
             return null;
         }
     }
+
+    /**
+     * Determines the type of a {@code DynaProperty}. Here a special treatment
+     * is needed for mapped properties.
+     *
+     * @param dynaProperty the property descriptor
+     * @param value the value object to be set for this property
+     * @return the type of this property
+     */
+    private static Class<?> dynaPropertyType(DynaProperty dynaProperty,
+            Object value) {
+        if (!dynaProperty.isMapped()) {
+            return dynaProperty.getType();
+        }
+        return (value == null) ? String.class : value.getClass();
+    }
 }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean2.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean2.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean2.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/BeanUtilsBean2.java Fri Nov  8 21:08:30 2013
@@ -70,7 +70,7 @@ public class BeanUtilsBean2 extends Bean
      * @return The converted value
      */
     @Override
-    protected Object convert(Object value, Class type) {
+    protected Object convert(Object value, Class<?> type) {
         return getConvertUtils().convert(value, type);
     }
 }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConstructorUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConstructorUtils.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConstructorUtils.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConstructorUtils.java Fri Nov  8 21:08:30 2013
@@ -42,7 +42,7 @@ public class ConstructorUtils {
 
     // --------------------------------------------------------- Private Members
     /** An empty class array */
-    private static final Class[] EMPTY_CLASS_PARAMETERS = new Class[0];
+    private static final Class<?>[] EMPTY_CLASS_PARAMETERS = new Class<?>[0];
     /** An empty object array */
     private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
 
@@ -55,6 +55,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should be assignment compatible.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param arg the actual argument. May be null (this will result in calling the default constructor).
      * @return new instance of <code>klazz</code>
@@ -66,7 +67,7 @@ public class ConstructorUtils {
      *
      * @see #invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
      */
-    public static Object invokeConstructor(Class klass, Object arg)
+    public static <T> T invokeConstructor(Class<T> klass, Object arg)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -84,6 +85,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should be assignment compatible.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param args actual argument array. May be null (this will result in calling the default constructor).
      * @return new instance of <code>klazz</code>
@@ -95,7 +97,7 @@ public class ConstructorUtils {
      *
      * @see #invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
      */
-    public static Object invokeConstructor(Class klass, Object[] args)
+    public static <T> T invokeConstructor(Class<T> klass, Object[] args)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -106,7 +108,7 @@ public class ConstructorUtils {
             args = EMPTY_OBJECT_ARRAY;
         }
         int arguments = args.length;
-        Class parameterTypes[] = new Class[arguments];
+        Class<?> parameterTypes[] = new Class<?>[arguments];
         for (int i = 0; i < arguments; i++) {
             parameterTypes[i] = args[i].getClass();
         }
@@ -119,6 +121,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should be assignment compatible.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param args actual argument array. May be null (this will result in calling the default constructor).
      * @param parameterTypes parameter types array
@@ -130,10 +133,10 @@ public class ConstructorUtils {
      * @throws InstantiationException thrown on the constructor's invocation
      * @see Constructor#newInstance
      */
-    public static Object invokeConstructor(
-        Class klass,
+    public static <T> T invokeConstructor(
+        Class<T> klass,
         Object[] args,
-        Class[] parameterTypes)
+        Class<?>[] parameterTypes)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -147,7 +150,7 @@ public class ConstructorUtils {
             args = EMPTY_OBJECT_ARRAY;
         }
 
-        Constructor ctor =
+        Constructor<T> ctor =
             getMatchingAccessibleConstructor(klass, parameterTypes);
         if (null == ctor) {
             throw new NoSuchMethodException(
@@ -164,6 +167,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should match exactly.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param arg the actual argument. May be null (this will result in calling the default constructor).
      * @return new instance of <code>klazz</code>
@@ -175,7 +179,7 @@ public class ConstructorUtils {
      *
      * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
      */
-    public static Object invokeExactConstructor(Class klass, Object arg)
+    public static <T> T invokeExactConstructor(Class<T> klass, Object arg)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -193,6 +197,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should match exactly.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param args actual argument array. May be null (this will result in calling the default constructor).
      * @return new instance of <code>klazz</code>
@@ -204,7 +209,7 @@ public class ConstructorUtils {
      *
      * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
      */
-    public static Object invokeExactConstructor(Class klass, Object[] args)
+    public static <T> T invokeExactConstructor(Class<T> klass, Object[] args)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -215,7 +220,7 @@ public class ConstructorUtils {
             args = EMPTY_OBJECT_ARRAY;
         }
         int arguments = args.length;
-        Class parameterTypes[] = new Class[arguments];
+        Class<?> parameterTypes[] = new Class[arguments];
         for (int i = 0; i < arguments; i++) {
             parameterTypes[i] = args[i].getClass();
         }
@@ -229,6 +234,7 @@ public class ConstructorUtils {
      *
      * <p>The signatures should match exactly.</p>
      *
+     * @param <T> the type of the object to be constructed
      * @param klass the class to be constructed.
      * @param args actual argument array. May be null (this will result in calling the default constructor).
      * @param parameterTypes parameter types array
@@ -240,10 +246,10 @@ public class ConstructorUtils {
      * @throws InstantiationException thrown on the constructor's invocation
      * @see Constructor#newInstance
      */
-    public static Object invokeExactConstructor(
-        Class klass,
+    public static <T> T invokeExactConstructor(
+        Class<T> klass,
         Object[] args,
-        Class[] parameterTypes)
+        Class<?>[] parameterTypes)
         throws
             NoSuchMethodException,
             IllegalAccessException,
@@ -258,7 +264,7 @@ public class ConstructorUtils {
             parameterTypes = EMPTY_CLASS_PARAMETERS;
         }
 
-        Constructor ctor = getAccessibleConstructor(klass, parameterTypes);
+        Constructor<T> ctor = getAccessibleConstructor(klass, parameterTypes);
         if (null == ctor) {
             throw new NoSuchMethodException(
                 "No such accessible constructor on object: " + klass.getName());
@@ -268,17 +274,18 @@ public class ConstructorUtils {
 
     /**
      * Returns a constructor with single argument.
+     * @param <T> the type of the constructor
      * @param klass the class to be constructed
      * @param parameterType The constructor parameter type
      * @return null if matching accessible constructor can not be found.
      * @see Class#getConstructor
      * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
      */
-    public static Constructor getAccessibleConstructor(
-        Class klass,
-        Class parameterType) {
+    public static <T> Constructor<T> getAccessibleConstructor(
+        Class<T> klass,
+        Class<?> parameterType) {
 
-        Class[] parameterTypes = { parameterType };
+        Class<?>[] parameterTypes = { parameterType };
         return getAccessibleConstructor(klass, parameterTypes);
     }
 
@@ -290,9 +297,9 @@ public class ConstructorUtils {
      * @see Class#getConstructor
      * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
      */
-    public static Constructor getAccessibleConstructor(
-        Class klass,
-        Class[] parameterTypes) {
+    public static <T> Constructor<T> getAccessibleConstructor(
+        Class<T> klass,
+        Class<?>[] parameterTypes) {
 
         try {
             return getAccessibleConstructor(
@@ -304,11 +311,12 @@ public class ConstructorUtils {
 
     /**
      * Returns accessible version of the given constructor.
+     * @param <T> the type of the constructor
      * @param ctor prototype constructor object.
      * @return <code>null</code> if accessible constructor can not be found.
      * @see java.lang.SecurityManager
      */
-    public static Constructor getAccessibleConstructor(Constructor ctor) {
+    public static <T> Constructor<T> getAccessibleConstructor(Constructor<T> ctor) {
 
         // Make sure we have a method to check
         if (ctor == null) {
@@ -321,7 +329,7 @@ public class ConstructorUtils {
         }
 
         // If the declaring class is public, we are done
-        Class clazz = ctor.getDeclaringClass();
+        Class<T> clazz = ctor.getDeclaringClass();
         if (Modifier.isPublic(clazz.getModifiers())) {
             return (ctor);
         }
@@ -350,17 +358,18 @@ public class ConstructorUtils {
      * are assignment compatible with the parameter types.
      * The first matching constructor is returned.</p>
      *
+     * @param <T> the type of the class to be inspected
      * @param clazz find constructor for this class
      * @param parameterTypes find method with compatible parameters
      * @return a valid Constructor object. If there's no matching constructor, returns <code>null</code>.
      */
-    private static Constructor getMatchingAccessibleConstructor(
-        Class clazz,
-        Class[] parameterTypes) {
+    private static <T> Constructor<T> getMatchingAccessibleConstructor(
+        Class<T> clazz,
+        Class<?>[] parameterTypes) {
         // see if we can find the method directly
         // most of the time this works and it's much faster
         try {
-            Constructor ctor = clazz.getConstructor(parameterTypes);
+            Constructor<T> ctor = clazz.getConstructor(parameterTypes);
             try {
                 //
                 // XXX Default access superclass workaround
@@ -389,10 +398,10 @@ public class ConstructorUtils {
 
         // search through all methods
         int paramSize = parameterTypes.length;
-        Constructor[] ctors = clazz.getConstructors();
+        Constructor<?>[] ctors = clazz.getConstructors();
         for (int i = 0, size = ctors.length; i < size; i++) {
             // compare parameters
-            Class[] ctorParams = ctors[i].getParameterTypes();
+            Class<?>[] ctorParams = ctors[i].getParameterTypes();
             int ctorParamSize = ctorParams.length;
             if (ctorParamSize == paramSize) {
                 boolean match = true;
@@ -408,7 +417,7 @@ public class ConstructorUtils {
 
                 if (match) {
                     // get accessible version of method
-                    Constructor ctor = getAccessibleConstructor(ctors[i]);
+                    Constructor<?> ctor = getAccessibleConstructor(ctors[i]);
                     if (ctor != null) {
                         try {
                             ctor.setAccessible(true);
@@ -417,7 +426,11 @@ public class ConstructorUtils {
                              * TODO: Why?
                              */
                         }
-                        return ctor;
+                        @SuppressWarnings("unchecked")
+                        // Class.getConstructors() actually returns constructors
+                        // of type T, so it is safe to cast.
+                        Constructor<T> typedCtor = (Constructor<T>) ctor;
+                        return typedCtor;
                     }
                 }
             }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ContextClassLoaderLocal.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ContextClassLoaderLocal.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ContextClassLoaderLocal.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ContextClassLoaderLocal.java Fri Nov  8 21:08:30 2013
@@ -50,14 +50,14 @@ import java.util.WeakHashMap;
  * <p>Expected usage is as follows:<br>
  * <pre>
  *  public class SomeClass {
- *    private static final ContextClassLoaderLocal global
- *      = new ContextClassLoaderLocal() {
- *          protected Object initialValue() {
+ *    private static final ContextClassLoaderLocal&lt;String&gt; global
+ *      = new ContextClassLoaderLocal&lt;String&gt;() {
+ *          protected String initialValue() {
  *              return new String("Initial value");
  *          };
  *
  *    public void testGlobal() {
- *      String s = (String) global.get();
+ *      String s = global.get();
  *      System.out.println("global value:" + s);
  *      buf.set("New Value");
  *    }
@@ -97,13 +97,14 @@ import java.util.WeakHashMap;
  * containers required each component to load the full set of classes it
  * needs, ie avoided providing classes loaded via a "shared" classloader.</p>
  *
+ * @param <T> the type of data stored in an instance
  * @version $Id$
  * @see java.lang.Thread#getContextClassLoader
  */
-public class ContextClassLoaderLocal {
-    private final Map valueByClassLoader = new WeakHashMap();
+public class ContextClassLoaderLocal<T> {
+    private final Map<ClassLoader, T> valueByClassLoader = new WeakHashMap<ClassLoader, T>();
     private boolean globalValueInitialized = false;
-    private Object globalValue;
+    private T globalValue;
 
     /**
      * Construct a context classloader instance
@@ -125,7 +126,7 @@ public class ContextClassLoaderLocal {
      *
      * @return a new Object to be used as an initial value for this ContextClassLoaderLocal
      */
-    protected Object initialValue() {
+    protected T initialValue() {
         return null;
     }
 
@@ -135,7 +136,7 @@ public class ContextClassLoaderLocal {
      * This mechanism provides isolation for web apps deployed in the same container.
      * @return the object currently associated with the context-classloader of the current thread.
      */
-    public synchronized Object get() {
+    public synchronized T get() {
         // synchronizing the whole method is a bit slower
         // but guarantees no subtle threading problems, and there's no
         // need to synchronize valueByClassLoader
@@ -147,7 +148,7 @@ public class ContextClassLoaderLocal {
             ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
             if (contextClassLoader != null) {
 
-                Object value = valueByClassLoader.get(contextClassLoader);
+                T value = valueByClassLoader.get(contextClassLoader);
                 if ((value == null)
                 && !valueByClassLoader.containsKey(contextClassLoader)) {
                     value = initialValue();
@@ -173,7 +174,7 @@ public class ContextClassLoaderLocal {
      *
      * @param value the object to be associated with the entrant thread's context classloader
      */
-    public synchronized void set(Object value) {
+    public synchronized void set(T value) {
         // synchronizing the whole method is a bit slower
         // but guarentees no subtle threading problems
 

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtils.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtils.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtils.java Fri Nov  8 21:08:30 2013
@@ -247,7 +247,7 @@ public class ConvertUtils {
      *
      * @see ConvertUtilsBean#convert(String, Class)
      */
-    public static Object convert(String value, Class clazz) {
+    public static Object convert(String value, Class<?> clazz) {
         return ConvertUtilsBean.getInstance().convert(value, clazz);
     }
 
@@ -264,7 +264,7 @@ public class ConvertUtils {
      *
      * @see ConvertUtilsBean#convert(String[], Class)
      */
-    public static Object convert(String[] values, Class clazz) {
+    public static Object convert(String[] values, Class<?> clazz) {
         return ConvertUtilsBean.getInstance().convert(values, clazz);
     }
 
@@ -278,7 +278,7 @@ public class ConvertUtils {
      *
      * @exception ConversionException if thrown by an underlying Converter
      */
-    public static Object convert(Object value, Class targetType) {
+    public static Object convert(Object value, Class<?> targetType) {
         return ConvertUtilsBean.getInstance().convert(value, targetType);
     }
 
@@ -304,7 +304,7 @@ public class ConvertUtils {
      * @param clazz Class for which to remove a registered Converter
      * @see ConvertUtilsBean#deregister(Class)
      */
-    public static void deregister(Class clazz) {
+    public static void deregister(Class<?> clazz) {
         ConvertUtilsBean.getInstance().deregister(clazz);
     }
 
@@ -320,7 +320,7 @@ public class ConvertUtils {
      * @return The registered {@link Converter} or <code>null</code> if not found
      * @see ConvertUtilsBean#lookup(Class)
      */
-    public static Converter lookup(Class clazz) {
+    public static Converter lookup(Class<?> clazz) {
         return ConvertUtilsBean.getInstance().lookup(clazz);
     }
 
@@ -333,7 +333,7 @@ public class ConvertUtils {
      * @param targetType Class of the value to be converted to
      * @return The registered {@link Converter} or <code>null</code> if not found
      */
-    public static Converter lookup(Class sourceType, Class targetType) {
+    public static Converter lookup(Class<?> sourceType, Class<?> targetType) {
         return ConvertUtilsBean.getInstance().lookup(sourceType, targetType);
     }
 
@@ -348,8 +348,46 @@ public class ConvertUtils {
      *  Converter
      * @see ConvertUtilsBean#register(Converter, Class)
      */
-    public static void register(Converter converter, Class clazz) {
+    public static void register(Converter converter, Class<?> clazz) {
         ConvertUtilsBean.getInstance().register(converter, clazz);
     }
 
+
+    /**
+     * Change primitive Class types to the associated wrapper class. This is
+     * useful for concrete converter implementations which typically treat
+     * primitive types like their corresponding wrapper types.
+     *
+     * @param type The class type to check.
+     * @return The converted type.
+     * @since 1.9
+     */
+    // All type casts are safe because the TYPE members of the wrapper types
+    // return their own class.
+    @SuppressWarnings("unchecked")
+    public static <T> Class<T> primitiveToWrapper(Class<T> type) {
+        if (type == null || !type.isPrimitive()) {
+            return type;
+        }
+
+        if (type == Integer.TYPE) {
+            return (Class<T>) Integer.class;
+        } else if (type == Double.TYPE) {
+            return (Class<T>) Double.class;
+        } else if (type == Long.TYPE) {
+            return (Class<T>) Long.class;
+        } else if (type == Boolean.TYPE) {
+            return (Class<T>) Boolean.class;
+        } else if (type == Float.TYPE) {
+            return (Class<T>) Float.class;
+        } else if (type == Short.TYPE) {
+            return (Class<T>) Short.class;
+        } else if (type == Byte.TYPE) {
+            return (Class<T>) Byte.class;
+        } else if (type == Character.TYPE) {
+            return (Class<T>) Character.class;
+        } else {
+            return type;
+        }
+    }
 }

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean.java Fri Nov  8 21:08:30 2013
@@ -145,7 +145,8 @@ public class ConvertUtilsBean {
      * The set of {@link Converter}s that can be used to convert Strings
      * into objects of a specified Class, keyed by the destination Class.
      */
-    private final WeakFastHashMap converters = new WeakFastHashMap();
+    private final WeakFastHashMap<Class<?>, Converter> converters =
+            new WeakFastHashMap<Class<?>, Converter>();
 
     /**
      * The <code>Log</code> instance for this class.
@@ -454,11 +455,11 @@ public class ConvertUtilsBean {
                 return null;
             } else {
                 Converter converter = lookup(String.class);
-                return ((String) converter.convert(String.class, value));
+                return (converter.convert(String.class, value));
             }
         } else {
             Converter converter = lookup(String.class);
-            return ((String) converter.convert(String.class, value));
+            return (converter.convert(String.class, value));
         }
 
     }
@@ -468,13 +469,14 @@ public class ConvertUtilsBean {
      * Convert the specified value to an object of the specified class (if
      * possible).  Otherwise, return a String representation of the value.
      *
+     * @param <T> The desired target type of the conversion
      * @param value Value to be converted (may be null)
      * @param clazz Java class to be converted to (must not be null)
      * @return The converted value
      *
      * @exception ConversionException if thrown by an underlying Converter
      */
-    public Object convert(String value, Class clazz) {
+    public Object convert(String value, Class<?> clazz) {
 
         if (log.isDebugEnabled()) {
             log.debug("Convert string '" + value + "' to class '" +
@@ -505,9 +507,9 @@ public class ConvertUtilsBean {
      *
      * @exception ConversionException if thrown by an underlying Converter
      */
-    public Object convert(String[] values, Class clazz) {
+    public Object convert(String[] values, Class<?> clazz) {
 
-        Class type = clazz;
+        Class<?> type = clazz;
         if (clazz.isArray()) {
             type = clazz.getComponentType();
         }
@@ -532,8 +534,9 @@ public class ConvertUtilsBean {
 
 
     /**
-     * <p>Convert the value to an object of the specified class (if
-     * possible).</p>
+     * Convert the value to an object of the specified class (if
+     * possible). If no converter for the desired target type is registered,
+     * the passed in object is returned unchanged.
      *
      * @param value Value to be converted (may be null)
      * @param targetType Class of the value to be converted to (must not be null)
@@ -541,9 +544,9 @@ public class ConvertUtilsBean {
      *
      * @exception ConversionException if thrown by an underlying Converter
      */
-    public Object convert(Object value, Class targetType) {
+    public Object convert(Object value, Class<?> targetType) {
 
-        Class sourceType = value == null ? null : value.getClass();
+        Class<?> sourceType = value == null ? null : value.getClass();
 
         if (log.isDebugEnabled()) {
             if (value == null) {
@@ -563,7 +566,7 @@ public class ConvertUtilsBean {
             }
             converted = converter.convert(targetType, value);
         }
-        if (targetType == String.class && converted != null &&
+        if (String.class.equals(targetType) && converted != null &&
                 !(converted instanceof String)) {
 
             // NOTE: For backwards compatibility, if the Converter
@@ -789,9 +792,9 @@ public class ConvertUtilsBean {
      * value used in the event of a conversion error
      * @param defaultArraySize The size of the default array
      */
-    private void registerArrayConverter(Class componentType, Converter componentConverter,
+    private void registerArrayConverter(Class<?> componentType, Converter componentConverter,
             boolean throwException, int defaultArraySize) {
-        Class arrayType = Array.newInstance(componentType, 0).getClass();
+        Class<?> arrayType = Array.newInstance(componentType, 0).getClass();
         Converter arrayConverter = null;
         if (throwException) {
             arrayConverter = new ArrayConverter(arrayType, componentConverter);
@@ -802,7 +805,7 @@ public class ConvertUtilsBean {
     }
 
     /** strictly for convenience since it has same parameter order as Map.put */
-    private void register(Class clazz, Converter converter) {
+    private void register(Class<?> clazz, Converter converter) {
         register(new ConverterFacade(converter), clazz);
     }
 
@@ -812,7 +815,7 @@ public class ConvertUtilsBean {
      *
      * @param clazz Class for which to remove a registered Converter
      */
-    public void deregister(Class clazz) {
+    public void deregister(Class<?> clazz) {
 
         converters.remove(clazz);
 
@@ -827,9 +830,9 @@ public class ConvertUtilsBean {
      * @param clazz Class for which to return a registered Converter
      * @return The registered {@link Converter} or <code>null</code> if not found
      */
-    public Converter lookup(Class clazz) {
+    public Converter lookup(Class<?> clazz) {
 
-        return ((Converter) converters.get(clazz));
+        return (converters.get(clazz));
 
     }
 
@@ -842,7 +845,7 @@ public class ConvertUtilsBean {
      * @param targetType Class of the value to be converted to
      * @return The registered {@link Converter} or <code>null</code> if not found
      */
-    public Converter lookup(Class sourceType, Class targetType) {
+    public Converter lookup(Class<?> sourceType, Class<?> targetType) {
 
         if (targetType == null) {
             throw new IllegalArgumentException("Target type is missing");
@@ -888,7 +891,7 @@ public class ConvertUtilsBean {
      * @param clazz Destination class for conversions performed by this
      *  Converter
      */
-    public void register(Converter converter, Class clazz) {
+    public void register(Converter converter, Class<?> clazz) {
 
         converters.put(clazz, converter);
 

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean2.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean2.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean2.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/ConvertUtilsBean2.java Fri Nov  8 21:08:30 2013
@@ -56,7 +56,7 @@ public class ConvertUtilsBean2 extends C
      * @see ConvertUtilsBean#convert(String[], Class)
      */
     @Override
-    public Object convert(String value, Class clazz) {
+    public Object convert(String value, Class<?> clazz) {
         return convert((Object)value, clazz);
     }
 
@@ -71,7 +71,7 @@ public class ConvertUtilsBean2 extends C
      * @see ConvertUtilsBean#convert(String[], Class)
      */
     @Override
-    public Object convert(String[] value, Class clazz) {
+    public Object convert(String[] value, Class<?> clazz) {
         return convert((Object)value, clazz);
     }
 

Modified: commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/Converter.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/Converter.java?rev=1540186&r1=1540185&r2=1540186&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/Converter.java (original)
+++ commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/Converter.java Fri Nov  8 21:08:30 2013
@@ -43,6 +43,7 @@ public interface Converter {
      * Convert the specified input object into an output object of the
      * specified type.
      *
+     * @param <T> the desired result type
      * @param type Data type to which this value should be converted
      * @param value The input value to be converted
      * @return The converted value
@@ -50,7 +51,7 @@ public interface Converter {
      * @exception ConversionException if conversion cannot be performed
      *  successfully
      */
-    public Object convert(Class type, Object value);
+    public <T> T convert(Class<T> type, Object value);
 
 
 }