sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1443133 - /sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java
Date Wed, 06 Feb 2013 19:06:11 GMT
Author: desruisseaux
Date: Wed Feb  6 19:06:10 2013
New Revision: 1443133

URL: http://svn.apache.org/viewvc?rev=1443133&view=rev
Log:
Refactored checkConstructorArgs as below:
* Splited in two methods: ensureValidType and ensureCompatibleType.
* For the ensureValidType part, replaced the loop over getInterfaces() by a call to Class.isAssignableFrom.
* Moved just below the constructor.

Removed the throws IllegalArgumentException in method signature, because this exception should
never happen
if the user does not bypass parameterized types (in the later case, he would get compiler
warnings anyway).

Modified:
    sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java

Modified: sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java?rev=1443133&r1=1443132&r2=1443133&view=diff
==============================================================================
--- sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java (original)
+++ sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/measure/Range.java Wed Feb
 6 19:06:10 2013
@@ -19,6 +19,9 @@ package org.apache.sis.measure;
 import java.io.Serializable;
 import net.jcip.annotations.Immutable;
 import org.apache.sis.util.collection.CheckedContainer;
+import org.apache.sis.util.resources.Errors;
+
+import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
 
 
 /**
@@ -76,9 +79,7 @@ public class Range<T extends Comparable<
      * @param minValue     The minimal value (inclusive), or {@code null} if none.
      * @param maxValue     The maximal value (inclusive), or {@code null} if none.
      */
-    public Range(final Class<T> elementType, final T minValue,
-            final T maxValue) throws IllegalArgumentException
-    {
+    public Range(final Class<T> elementType, final T minValue, final T maxValue) {
         this(elementType, minValue, true, maxValue, true);
     }
 
@@ -93,17 +94,43 @@ public class Range<T extends Comparable<
      */
     public Range(final Class<T> elementType,
             final T minValue, final boolean isMinIncluded,
-            final T maxValue, final boolean isMaxIncluded) throws IllegalArgumentException
+            final T maxValue, final boolean isMaxIncluded)
     {
-        if(!checkConstructorArgs(elementType, minValue, maxValue))
-        {
-            throw new IllegalArgumentException();
-        }
+        ensureNonNull("elementType", elementType);
+        /*
+         * The 'isMin/Maxincluded' flags must be forced to 'false' if 'minValue' or 'maxValue'
+         * are null. This is required for proper working of algorithms implemented in this
class.
+         */
         this.elementType   = elementType;
         this.minValue      = minValue;
         this.isMinIncluded = isMinIncluded && (minValue != null);
         this.maxValue      = maxValue;
         this.isMaxIncluded = isMaxIncluded && (maxValue != null);
+        ensureValidType();
+        if (minValue != null) ensureCompatibleType(minValue.getClass());
+        if (maxValue != null) ensureCompatibleType(maxValue.getClass());
+    }
+
+    /**
+     * Ensures that the given type is compatible with the type expected by this range.
+     */
+    private void ensureCompatibleType(final Class<?> type) throws IllegalArgumentException
{
+        if (!elementType.isAssignableFrom(type)) {
+            throw new IllegalArgumentException(Errors.format(
+                    Errors.Keys.IllegalClass_2, elementType, type));
+        }
+    }
+
+    /**
+     * Ensures that {@link #elementType} is compatible with the type expected by this range
class.
+     * This method is invoked at construction time for validating the type argument. This
method
+     * is overridden by {@link NumberRange} and {@link DateRange} for more specific check.
+     */
+    void ensureValidType() throws IllegalArgumentException {
+        if (!Comparable.class.isAssignableFrom(elementType)) {
+            throw new IllegalArgumentException(Errors.format(
+                    Errors.Keys.IllegalClass_2, Comparable.class, elementType));
+        }
     }
 
     /**
@@ -430,38 +457,6 @@ public class Range<T extends Comparable<
         return hash;
     }
 
-    private static <T> boolean checkConstructorArgs(final Class<T> elementType,
-            final T minValue, final T maxValue)
-    {
-        boolean retVal = true;
-        if (minValue != null)
-        {
-            boolean minimumOk = minValue.getClass() == elementType;
-            retVal &= minimumOk;
-        }
-
-        if (maxValue != null)
-        {
-            boolean maximumOk = maxValue.getClass() == elementType;
-            retVal &= maximumOk;
-        }
-
-        if (minValue == null && maxValue == null)
-        {
-            Class[] interfaces = elementType.getInterfaces();
-            boolean comparableFound = false;
-            for (Class<?> interf : interfaces)
-            {
-                if (interf == Comparable.class)
-                {
-                    comparableFound = true;
-                }
-            }
-            retVal &= comparableFound;
-        }
-        return retVal;
-    }
-
     private boolean checkMethodArgs(final Range<T> value) {
         if (value == null)
         {



Mime
View raw message