You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ju...@apache.org on 2012/08/24 07:24:35 UTC

svn commit: r1376829 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/ObjectUtils.java test/java/org/apache/commons/lang3/ObjectUtilsTest.java

Author: julius
Date: Fri Aug 24 05:24:35 2012
New Revision: 1376829

URL: http://svn.apache.org/viewvc?rev=1376829&view=rev
Log:
LANG-816 - followup incorporating ggregory's doc suggestion, some doc fixes, addition of CONST_BYTE() and CONST_SHORT(), and Junit improvements to test doc examples and make sure CONST_BYTE() and CONST_SHORT() throw IllegalArgumentException as required.

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ObjectUtils.java
    commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ObjectUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ObjectUtils.java?rev=1376829&r1=1376828&r2=1376829&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ObjectUtils.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ObjectUtils.java Fri Aug 24 05:24:35 2012
@@ -632,7 +632,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static boolean MAGIC_FLAG = CONST(true);
+     * <pre>
+     *     public final static boolean MAGIC_FLAG = ObjectUtils.CONST(true);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -648,7 +650,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_BYTE = CONST(127);
+     * <pre>
+     *     public final static byte MAGIC_BYTE = ObjectUtils.CONST((byte) 127);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -664,7 +668,35 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_CHAR = CONST('a');
+     * <pre>
+     *     public final static byte MAGIC_BYTE = ObjectUtils.CONST_BYTE(127);
+     * </pre>
+     *
+     * This way any jars that refer to this field do not
+     * have to recompile themselves if the field's value
+     * changes at some future date.
+     *
+     * @param v the byte literal (as an int) value to return
+     * @throws IllegalArgumentException if the value passed to v
+     *         is larger than a byte, that is, smaller than -128 or
+     *         larger than 127.
+     * @return the byte v, unchanged
+     */
+    public static byte CONST_BYTE(final int v) throws IllegalArgumentException {
+        if (v < Byte.MIN_VALUE || v > Byte.MAX_VALUE) {
+            throw new IllegalArgumentException("Supplied value must be a valid byte literal between -128 and 127: [" + v + "]");
+        }
+        return (byte) v;
+    }
+
+    /**
+     * This method returns the provided value unchanged.
+     * This can prevent javac from inlining a constant
+     * field, e.g.,
+     *
+     * <pre>
+     *     public final static char MAGIC_CHAR = ObjectUtils.CONST('a');
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -680,7 +712,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_SHORT = CONST(123);
+     * <pre>
+     *     public final static short MAGIC_SHORT = ObjectUtils.CONST((short) 123);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -696,7 +730,36 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_INT = CONST(123);
+     * <pre>
+     *     public final static short MAGIC_SHORT = ObjectUtils.CONST_SHORT(127);
+     * </pre>
+     *
+     * This way any jars that refer to this field do not
+     * have to recompile themselves if the field's value
+     * changes at some future date.
+     *
+     * @param v the short literal (as an int) value to return
+     * @throws IllegalArgumentException if the value passed to v
+     *         is larger than a short, that is, smaller than -32768 or
+     *         larger than 32767.
+     * @return the byte v, unchanged
+     */
+    public static short CONST_SHORT(final int v) throws IllegalArgumentException {
+        if (v < Short.MIN_VALUE || v > Short.MAX_VALUE) {
+            throw new IllegalArgumentException("Supplied value must be a valid byte literal between -32768 and 32767: [" + v + "]");
+        }
+        return (short) v;
+    }
+
+
+    /**
+     * This method returns the provided value unchanged.
+     * This can prevent javac from inlining a constant
+     * field, e.g.,
+     *
+     * <pre>
+     *     public final static int MAGIC_INT = ObjectUtils.CONST(123);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -712,7 +775,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_LONG = CONST(123L);
+     * <pre>
+     *     public final static long MAGIC_LONG = ObjectUtils.CONST(123L);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -728,7 +793,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_FLOAT = CONST(1.0f);
+     * <pre>
+     *     public final static float MAGIC_FLOAT = ObjectUtils.CONST(1.0f);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -744,7 +811,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_DOUBLE = CONST(1.0);
+     * <pre>
+     *     public final static double MAGIC_DOUBLE = ObjectUtils.CONST(1.0);
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value
@@ -760,7 +829,9 @@ public class ObjectUtils {
      * This can prevent javac from inlining a constant
      * field, e.g.,
      *
-     *  public final static byte MAGIC_STRING = CONST("abc");
+     * <pre>
+     *     public final static String MAGIC_STRING = ObjectUtils.CONST("abc");
+     * </pre>
      *
      * This way any jars that refer to this field do not
      * have to recompile themselves if the field's value

Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java?rev=1376829&r1=1376828&r2=1376829&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java (original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java Fri Aug 24 05:24:35 2012
@@ -466,6 +466,65 @@ public class ObjectUtilsTest {
         assertEquals("CONST(float)", 3f, ObjectUtils.CONST(3f), 0);
         assertEquals("CONST(double)", 3.0, ObjectUtils.CONST(3.0), 0);
         assertEquals("CONST(Object)", "abc", ObjectUtils.CONST("abc"));
+
+        // Make sure documentation examples from Javadoc all work
+        // (this fixed a lot of my bugs when I these!)
+        //
+        // My bugs should be in a software engineering textbook
+        // for "Can you screw this up?"  The answer is, yes,
+        // you can even screw this up.  (When you == Julius)
+        // .
+        boolean MAGIC_FLAG = ObjectUtils.CONST(true);
+        byte MAGIC_BYTE1 = ObjectUtils.CONST((byte) 127);
+        byte MAGIC_BYTE2 = ObjectUtils.CONST_BYTE(127);
+        char MAGIC_CHAR = ObjectUtils.CONST('a');
+        short MAGIC_SHORT1 = ObjectUtils.CONST((short) 123);
+        short MAGIC_SHORT2 = ObjectUtils.CONST_SHORT(127);
+        int MAGIC_INT = ObjectUtils.CONST(123);
+        long MAGIC_LONG1 = ObjectUtils.CONST(123L);
+        long MAGIC_LONG2 = ObjectUtils.CONST(3);
+        float MAGIC_FLOAT = ObjectUtils.CONST(1.0f);
+        double MAGIC_DOUBLE = ObjectUtils.CONST(1.0);
+        String MAGIC_STRING = ObjectUtils.CONST("abc");
+
+        assertEquals(true, MAGIC_FLAG);
+        assertEquals(127, MAGIC_BYTE1);
+        assertEquals(127, MAGIC_BYTE2);
+        assertEquals('a', MAGIC_CHAR);
+        assertEquals(123, MAGIC_SHORT1);
+        assertEquals(127, MAGIC_SHORT2);
+        assertEquals(123, MAGIC_INT);
+        assertEquals(123, MAGIC_LONG1);
+        assertEquals(3, MAGIC_LONG2);
+        assertEquals(1.0f, MAGIC_FLOAT, 0.0f);
+        assertEquals(1.0, MAGIC_DOUBLE, 0.0);
+        assertEquals("abc", MAGIC_STRING);
+
+        try {
+            ObjectUtils.CONST_BYTE(-129);
+            fail("CONST_BYTE(-129): IllegalArgumentException should have been thrown.");
+        } catch (IllegalArgumentException iae) {
+
+        }
+        try {
+            ObjectUtils.CONST_BYTE(128);
+            fail("CONST_BYTE(128): IllegalArgumentException should have been thrown.");
+        } catch (IllegalArgumentException iae) {
+
+        }
+        try {
+            ObjectUtils.CONST_SHORT(-32769);
+            fail("CONST_SHORT(-32769): IllegalArgumentException should have been thrown.");
+        } catch (IllegalArgumentException iae) {
+
+        }
+        try {
+            ObjectUtils.CONST_BYTE(32768);
+            fail("CONST_SHORT(32768): IllegalArgumentException should have been thrown.");
+        } catch (IllegalArgumentException iae) {
+
+        }
+
     }
 
     /**