You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/01/25 03:10:23 UTC

(commons-lang) branch master updated: Address minor redundancies after code inspection (#1148)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git


The following commit(s) were added to refs/heads/master by this push:
     new 84b475ae4 Address minor redundancies after code inspection (#1148)
84b475ae4 is described below

commit 84b475ae4983ced77e868c0467a52f217f8bcc8e
Author: Capt. Cutlass <51...@users.noreply.github.com>
AuthorDate: Wed Jan 24 22:10:17 2024 -0500

    Address minor redundancies after code inspection (#1148)
    
    * refactor: remove redundant string conversion
    
    * refactor: remove unused assignments (minor)
    
    * refactor: remove unused assignments (major)
    
    Keeping this "bulky" cleanup as a separate commit for review convenience (can be squashed afterward).
    
    * refactor: address feedback
    
    * refactor: split testIsAssignable by groups
    
    * refactor: remove unnecessary boxing
    
    * refactor: extract null-locale case into separate test
    
    * refactor: use named fields for generic types
    
    * refactor: more specific checked exception in method declaration
    
    * refactor: remove pseudo-comment variables
    
    * refactor: revert remove unnecessary boxing
---
 .../java/org/apache/commons/lang3/StringUtils.java |   4 +-
 .../lang3/concurrent/ConstantInitializer.java      |   3 +-
 .../apache/commons/lang3/reflect/TypeUtils.java    |   2 +-
 .../commons/lang3/CharSequenceUtilsTest.java       |   2 +-
 .../commons/lang3/RandomStringUtilsTest.java       |   6 +-
 .../java/org/apache/commons/lang3/RangeTest.java   |  12 +-
 .../commons/lang3/StringEscapeUtilsTest.java       |   2 +-
 .../org/apache/commons/lang3/StringUtilsTest.java  |   8 +-
 .../lang3/builder/JsonToStringStyleTest.java       |   4 +-
 .../lang3/exception/ExceptionUtilsTest.java        |   2 -
 .../commons/lang3/function/MethodFixtures.java     |  10 -
 .../apache/commons/lang3/math/FractionTest.java    |   3 +-
 .../apache/commons/lang3/math/NumberUtilsTest.java |  29 +-
 .../commons/lang3/reflect/TypeUtilsTest.java       | 668 ++++++++-------------
 .../lang3/reflect/testbed/GenericTypeHolder.java   |  15 +
 .../lang3/text/ExtendedMessageFormatTest.java      |  66 +-
 .../lang3/text/StrBuilderAppendInsertTest.java     |   4 +-
 .../apache/commons/lang3/time/DateUtilsTest.java   |   2 +-
 .../commons/lang3/time/FastDateParserSDFTest.java  |   6 +-
 .../time/FastDateParser_TimeZoneStrategyTest.java  |   2 +-
 .../commons/lang3/util/FluentBitSetTest.java       |   2 +-
 21 files changed, 363 insertions(+), 489 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 19f13c597..bb52b383f 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -438,7 +438,7 @@ public class StringUtils {
                 }
             }
         }
-        return str + suffix.toString();
+        return str + suffix;
     }
 
     /**
@@ -5681,7 +5681,7 @@ public class StringUtils {
                 }
             }
         }
-        return prefix.toString() + str;
+        return prefix + str;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/lang3/concurrent/ConstantInitializer.java b/src/main/java/org/apache/commons/lang3/concurrent/ConstantInitializer.java
index cfa407b77..3d2bdaee2 100644
--- a/src/main/java/org/apache/commons/lang3/concurrent/ConstantInitializer.java
+++ b/src/main/java/org/apache/commons/lang3/concurrent/ConstantInitializer.java
@@ -133,7 +133,6 @@ public class ConstantInitializer<T> implements ConcurrentInitializer<T> {
      */
     @Override
     public String toString() {
-        return String.format(FMT_TO_STRING, Integer.valueOf(System.identityHashCode(this)),
-                String.valueOf(getObject()));
+        return String.format(FMT_TO_STRING, Integer.valueOf(System.identityHashCode(this)), getObject());
     }
 }
diff --git a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
index 264c7dea5..610418c4f 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
@@ -1591,7 +1591,7 @@ public class TypeUtils {
             if (useOwner instanceof Class<?>) {
                 builder.append(((Class<?>) useOwner).getName());
             } else {
-                builder.append(useOwner.toString());
+                builder.append(useOwner);
             }
             builder.append('.').append(raw.getSimpleName());
         }
diff --git a/src/test/java/org/apache/commons/lang3/CharSequenceUtilsTest.java b/src/test/java/org/apache/commons/lang3/CharSequenceUtilsTest.java
index 47d76466a..e9022a465 100644
--- a/src/test/java/org/apache/commons/lang3/CharSequenceUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/CharSequenceUtilsTest.java
@@ -219,7 +219,7 @@ public class CharSequenceUtilsTest extends AbstractLangTest {
             if (random.nextDouble() < 0.5) {
                 original.append(random.nextInt() % 10);
             } else {
-                original = new StringBuilder().append(String.valueOf(random.nextInt() % 100)).append(original);
+                original = new StringBuilder().append(random.nextInt() % 100).append(original);
             }
             testNewLastIndexOfSingle(original, seg);
         }
diff --git a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
index 0ff72e0e0..bc6a33287 100644
--- a/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/RandomStringUtilsTest.java
@@ -51,9 +51,8 @@ public class RandomStringUtilsTest extends AbstractLangTest {
      */
     private double chiSquare(final int[] expected, final int[] observed) {
         double sumSq = 0.0d;
-        double dev = 0.0d;
         for (int i = 0; i < observed.length; i++) {
-            dev = observed[i] - expected[i];
+            double dev = observed[i] - expected[i];
             sumSq += dev * dev / expected[i];
         }
         return sumSq;
@@ -511,11 +510,10 @@ public class RandomStringUtilsTest extends AbstractLangTest {
     public void testRandomStringUtilsHomog() {
         final String set = "abc";
         final char[] chars = set.toCharArray();
-        String gen = "";
         final int[] counts = {0, 0, 0};
         final int[] expected = {200, 200, 200};
         for (int i = 0; i < 100; i++) {
-            gen = RandomStringUtils.random(6, chars);
+            String gen = RandomStringUtils.random(6, chars);
             for (int j = 0; j < 6; j++) {
                 switch (gen.charAt(j)) {
                     case 'a': {
diff --git a/src/test/java/org/apache/commons/lang3/RangeTest.java b/src/test/java/org/apache/commons/lang3/RangeTest.java
index 641f0f165..619688525 100644
--- a/src/test/java/org/apache/commons/lang3/RangeTest.java
+++ b/src/test/java/org/apache/commons/lang3/RangeTest.java
@@ -117,20 +117,16 @@ public class RangeTest extends AbstractLangTest {
         final DerivedComparableA derivedComparableA = new DerivedComparableA();
         final DerivedComparableB derivedComparableB = new DerivedComparableB();
 
-        Range<AbstractComparable> mixed = Range.between(derivedComparableA, derivedComparableB);
-        mixed = Range.between(derivedComparableA, derivedComparableB, null);
+        Range<AbstractComparable> mixed = Range.between(derivedComparableA, derivedComparableB, null);
         assertTrue(mixed.contains(derivedComparableA));
 
-        Range<AbstractComparable> same = Range.between(derivedComparableA, derivedComparableA);
-        same = Range.between(derivedComparableA, derivedComparableA, null);
+        Range<AbstractComparable> same = Range.between(derivedComparableA, derivedComparableA, null);
         assertTrue(same.contains(derivedComparableA));
 
-        Range<DerivedComparableA> rangeA = Range.between(derivedComparableA, derivedComparableA);
-        rangeA = Range.between(derivedComparableA, derivedComparableA, null);
+        Range<DerivedComparableA> rangeA = Range.between(derivedComparableA, derivedComparableA, null);
         assertTrue(rangeA.contains(derivedComparableA));
 
-        Range<DerivedComparableB> rangeB = Range.is(derivedComparableB);
-        rangeB = Range.is(derivedComparableB, null);
+        Range<DerivedComparableB> rangeB = Range.is(derivedComparableB, null);
         assertTrue(rangeB.contains(derivedComparableB));
     }
 
diff --git a/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
index 8fe649833..faa6544cf 100644
--- a/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java
@@ -487,7 +487,7 @@ public class StringEscapeUtilsTest extends AbstractLangTest {
         for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i++) {
             final Character c1 = Character.valueOf(i);
             final Character c2 = Character.valueOf((char) (i+1));
-            final String expected = c1.toString() + c2.toString();
+            final String expected = c1.toString() + c2;
             final String escapedC1 = "&#x" + Integer.toHexString((c1.charValue())) + ";";
             final String escapedC2 = "&#x" + Integer.toHexString((c2.charValue())) + ";";
             assertEquals(expected, StringEscapeUtils.unescapeHtml4(escapedC1 + escapedC2), "hex number unescape index " + (int) i);
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index 9094633f8..96004a4f3 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -73,16 +73,16 @@ public class StringUtilsTest extends AbstractLangTest {
         final StringBuilder ntr = new StringBuilder();
         for (int i = 0; i < Character.MAX_VALUE; i++) {
             if (Character.isWhitespace((char) i)) {
-                ws.append(String.valueOf((char) i));
+                ws.append((char) i);
                 if (i > 32) {
-                    ntr.append(String.valueOf((char) i));
+                    ntr.append((char) i);
                 }
             } else if (i < 40) {
-                nws.append(String.valueOf((char) i));
+                nws.append((char) i);
             }
         }
         for (int i = 0; i <= 32; i++) {
-            tr.append(String.valueOf((char) i));
+            tr.append((char) i);
         }
         WHITESPACE = ws.toString();
         NON_WHITESPACE = nws.toString();
diff --git a/src/test/java/org/apache/commons/lang3/builder/JsonToStringStyleTest.java b/src/test/java/org/apache/commons/lang3/builder/JsonToStringStyleTest.java
index ac0b516c7..5370960bc 100644
--- a/src/test/java/org/apache/commons/lang3/builder/JsonToStringStyleTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/JsonToStringStyleTest.java
@@ -333,9 +333,9 @@ public class JsonToStringStyleTest extends AbstractLangTest {
 
         assertThrows(UnsupportedOperationException.class, () -> new ToStringBuilder(base).append(now).toString());
 
-        assertEquals("{\"now\":\"" + now.toString() +"\"}", new ToStringBuilder(base).append("now", now)
+        assertEquals("{\"now\":\"" + now +"\"}", new ToStringBuilder(base).append("now", now)
                 .toString());
-        assertEquals("{\"now\":\"" + now.toString() +"\",\"after\":\"" + afterNow.toString() + "\"}", new ToStringBuilder(base).append("now", now).append("after", afterNow)
+        assertEquals("{\"now\":\"" + now +"\",\"after\":\"" + afterNow + "\"}", new ToStringBuilder(base).append("now", now).append("after", afterNow)
                 .toString());
     }
 
diff --git a/src/test/java/org/apache/commons/lang3/exception/ExceptionUtilsTest.java b/src/test/java/org/apache/commons/lang3/exception/ExceptionUtilsTest.java
index e3d39b48f..6ce2fdd80 100644
--- a/src/test/java/org/apache/commons/lang3/exception/ExceptionUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/exception/ExceptionUtilsTest.java
@@ -695,7 +695,6 @@ public class ExceptionUtilsTest extends AbstractLangTest {
         ExceptionUtils.printRootCauseStackTrace(null, new PrintStream(out));
         assertEquals(0, out.toString().length());
 
-        out = new ByteArrayOutputStream(1024);
         assertThrows(
                 NullPointerException.class,
                 () -> ExceptionUtils.printRootCauseStackTrace(withCause, (PrintStream) null));
@@ -719,7 +718,6 @@ public class ExceptionUtilsTest extends AbstractLangTest {
         ExceptionUtils.printRootCauseStackTrace(null, new PrintWriter(writer));
         assertEquals(0, writer.getBuffer().length());
 
-        writer = new StringWriter(1024);
         assertThrows(
                 NullPointerException.class,
                 () -> ExceptionUtils.printRootCauseStackTrace(withCause, (PrintWriter) null));
diff --git a/src/test/java/org/apache/commons/lang3/function/MethodFixtures.java b/src/test/java/org/apache/commons/lang3/function/MethodFixtures.java
index 527154dc0..2a35533c2 100644
--- a/src/test/java/org/apache/commons/lang3/function/MethodFixtures.java
+++ b/src/test/java/org/apache/commons/lang3/function/MethodFixtures.java
@@ -23,8 +23,6 @@ import java.lang.reflect.Method;
 import org.apache.commons.lang3.AbstractLangTest;
 import org.apache.commons.lang3.exception.CustomCheckedException;
 import org.apache.commons.lang3.exception.CustomUncheckedException;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 
 class MethodFixtures extends AbstractLangTest {
 
@@ -120,14 +118,6 @@ class MethodFixtures extends AbstractLangTest {
 
     private String[] valueArray;
 
-    @BeforeEach
-    @AfterEach
-    public void clear() {
-        value1 = null;
-        value1 = null;
-        valueArray = null;
-    }
-
     public String geStringtVarStringArgs(final String... strings) {
         return "XYZ";
     }
diff --git a/src/test/java/org/apache/commons/lang3/math/FractionTest.java b/src/test/java/org/apache/commons/lang3/math/FractionTest.java
index feb3f458b..684a9e55c 100644
--- a/src/test/java/org/apache/commons/lang3/math/FractionTest.java
+++ b/src/test/java/org/apache/commons/lang3/math/FractionTest.java
@@ -357,7 +357,7 @@ public class FractionTest extends AbstractLangTest {
         assertEquals(1, f.getDenominator());
 
         // normal
-        Fraction f2 = null;
+        Fraction f2;
         for (int i = 1; i <= 100; i++) {  // denominator
             for (int j = 1; j <= i; j++) {  // numerator
                 f = Fraction.getFraction((double) j / (double) i);
@@ -1036,7 +1036,6 @@ public class FractionTest extends AbstractLangTest {
         assertThrows(
                 ArithmeticException.class,
                 () -> Fraction.getFraction(1, Integer.MAX_VALUE).subtract(Fraction.getFraction(1, Integer.MAX_VALUE - 1)));
-            f = f1.subtract(f2);
 
         // denominator should not be a multiple of 2 or 3 to trigger overflow
         assertThrows(
diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
index 2db7878f9..8677afe36 100644
--- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
@@ -646,7 +646,7 @@ public class NumberUtilsTest extends AbstractLangTest {
         // Requested type is parsed as zero but the value is not zero
         final Double nonZero1 = Double.valueOf(((double) Float.MIN_VALUE) / 2);
         assertEquals(nonZero1, NumberUtils.createNumber(nonZero1.toString()));
-        assertEquals(nonZero1, NumberUtils.createNumber(nonZero1.toString() + "F"));
+        assertEquals(nonZero1, NumberUtils.createNumber(nonZero1 + "F"));
         // Smallest double is 4.9e-324.
         // Test a number with zero before and/or after the decimal place to hit edge cases.
         final BigDecimal nonZero2 = new BigDecimal("4.9e-325");
@@ -1415,12 +1415,9 @@ public class NumberUtilsTest extends AbstractLangTest {
      */
     @Test
     public void testStringCreateNumberEnsureNoPrecisionLoss() {
-        final String shouldBeFloat = "1.23";
-        final String shouldBeDouble = "3.40282354e+38";
-        final String shouldBeBigDecimal = "1.797693134862315759e+308";
-        assertTrue(NumberUtils.createNumber(shouldBeFloat) instanceof Float);
-        assertTrue(NumberUtils.createNumber(shouldBeDouble) instanceof Double);
-        assertTrue(NumberUtils.createNumber(shouldBeBigDecimal) instanceof BigDecimal);
+        assertTrue(NumberUtils.createNumber("1.23") instanceof Float);
+        assertTrue(NumberUtils.createNumber("3.40282354e+38") instanceof Double);
+        assertTrue(NumberUtils.createNumber("1.797693134862315759e+308") instanceof BigDecimal);
         // LANG-1060
         assertTrue(NumberUtils.createNumber("001.12") instanceof Float);
         assertTrue(NumberUtils.createNumber("-001.12") instanceof Float);
@@ -1432,15 +1429,15 @@ public class NumberUtilsTest extends AbstractLangTest {
         assertTrue(NumberUtils.createNumber("-001.797693134862315759e+308") instanceof BigDecimal);
         assertTrue(NumberUtils.createNumber("+001.797693134862315759e+308") instanceof BigDecimal);
         //LANG-1613
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_NORMAL)) instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_NORMAL) + "D") instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_NORMAL) + "F") instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_VALUE)) instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_VALUE) + "D") instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MIN_VALUE) + "F") instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MAX_VALUE)) instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MAX_VALUE) + "D") instanceof Double);
-        assertTrue(NumberUtils.createNumber(Double.toString(Double.MAX_VALUE) + "F") instanceof Double);
+        assertTrue(NumberUtils.createNumber("2.2250738585072014E-308") instanceof Double);
+        assertTrue(NumberUtils.createNumber("2.2250738585072014E-308D") instanceof Double);
+        assertTrue(NumberUtils.createNumber("2.2250738585072014E-308F") instanceof Double);
+        assertTrue(NumberUtils.createNumber("4.9E-324") instanceof Double);
+        assertTrue(NumberUtils.createNumber("4.9E-324D") instanceof Double);
+        assertTrue(NumberUtils.createNumber("4.9E-324F") instanceof Double);
+        assertTrue(NumberUtils.createNumber("1.7976931348623157E308") instanceof Double);
+        assertTrue(NumberUtils.createNumber("1.7976931348623157E308D") instanceof Double);
+        assertTrue(NumberUtils.createNumber("1.7976931348623157E308F") instanceof Double);
         assertTrue(NumberUtils.createNumber("4.9e-324D") instanceof Double);
         assertTrue(NumberUtils.createNumber("4.9e-324F") instanceof Double);
     }
diff --git a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
index c5a546cb0..b01ee870f 100644
--- a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
@@ -229,33 +229,8 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
 
     public Iterable<? extends Map<Integer, ? extends Collection<?>>> iterable;
 
-    public void delegateBooleanAssertion(final Type[] types, final int i2, final int i1, final boolean expected) {
-        final Type type1 = types[i1];
-        final Type type2 = types[i2];
-        final boolean isAssignable = TypeUtils.isAssignable(type2, type1);
-
-        if (expected) {
-            assertTrue(isAssignable,
-                    "[" + i1 + ", " + i2 + "]: From "
-                                + String.valueOf(type2) + " to "
-                                + String.valueOf(type1));
-        } else {
-            assertFalse(isAssignable,
-                    "[" + i1 + ", " + i2 + "]: From "
-                                + String.valueOf(type2) + " to "
-                                + String.valueOf(type1));
-        }
-    }
-
-    public void dummyMethod(final List list0, final List<Object> list1, final List<?> list2,
-            final List<? super Object> list3, final List<String> list4, final List<? extends String> list5,
-            final List<? super String> list6, final List[] list7, final List<Object>[] list8, final List<?>[] list9,
-            final List<? super Object>[] list10, final List<String>[] list11, final List<? extends String>[] list12,
-            final List<? super String>[] list13) {
-    }
-
     @Test
-    public void test_LANG_1114() throws Exception {
+    public void test_LANG_1114() throws NoSuchFieldException {
         final Type nonWildcardType = getClass().getDeclaredField("wildcardComparable").getGenericType();
         final Type wildcardType = ((ParameterizedType) nonWildcardType).getActualTypeArguments()[0];
 
@@ -264,7 +239,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void test_LANG_1190() throws Exception {
+    public void test_LANG_1190() throws NoSuchMethodException {
         final Type fromType = ClassWithSuperClassWithGenericType.class.getDeclaredMethod("methodWithGenericReturnType").getGenericReturnType();
         final Type failingToType = TypeUtils.wildcardType().withLowerBounds(ClassWithSuperClassWithGenericType.class).build();
 
@@ -272,7 +247,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void test_LANG_1348() throws Exception {
+    public void test_LANG_1348() throws NoSuchMethodException {
         final Method method = Enum.class.getMethod("valueOf", Class.class, String.class);
         assertEquals("T extends java.lang.Enum<T>", TypeUtils.toString(method.getGenericReturnType()));
     }
@@ -336,7 +311,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testContainsTypeVariables() throws Exception {
+    public void testContainsTypeVariables() throws NoSuchMethodException {
         assertFalse(TypeUtils.containsTypeVariables(Test1.class.getMethod("m0").getGenericReturnType()));
         assertFalse(TypeUtils.containsTypeVariables(Test1.class.getMethod("m1").getGenericReturnType()));
         assertTrue(TypeUtils.containsTypeVariables(Test1.class.getMethod("m2").getGenericReturnType()));
@@ -358,8 +333,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testDetermineTypeVariableAssignments() throws SecurityException,
-            NoSuchFieldException {
+    public void testDetermineTypeVariableAssignments() throws NoSuchFieldException {
         final ParameterizedType iterableType = (ParameterizedType) getClass().getField("iterable")
                 .getGenericType();
         final Map<TypeVariable<?>, Type> typeVarAssigns = TypeUtils.determineTypeArguments(TreeSet.class,
@@ -376,7 +350,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testGenericArrayType() throws Exception {
+    public void testGenericArrayType() throws NoSuchFieldException {
         final Type expected = getClass().getField("intWildcardComparable").getGenericType();
         final GenericArrayType actual =
             TypeUtils.genericArrayType(TypeUtils.parameterize(Comparable.class, TypeUtils.wildcardType()
@@ -386,27 +360,38 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testGetArrayComponentType() throws Exception {
-        final Method method = getClass().getMethod("dummyMethod", List.class, List.class, List.class,
-                List.class, List.class, List.class, List.class, List[].class, List[].class,
-                List[].class, List[].class, List[].class, List[].class, List[].class);
-
-        final Type[] types = method.getGenericParameterTypes();
-
-        assertNull(TypeUtils.getArrayComponentType(types[0]));
-        assertNull(TypeUtils.getArrayComponentType(types[1]));
-        assertNull(TypeUtils.getArrayComponentType(types[2]));
-        assertNull(TypeUtils.getArrayComponentType(types[3]));
-        assertNull(TypeUtils.getArrayComponentType(types[4]));
-        assertNull(TypeUtils.getArrayComponentType(types[5]));
-        assertNull(TypeUtils.getArrayComponentType(types[6]));
-        assertEquals(types[0], TypeUtils.getArrayComponentType(types[7]));
-        assertEquals(types[1], TypeUtils.getArrayComponentType(types[8]));
-        assertEquals(types[2], TypeUtils.getArrayComponentType(types[9]));
-        assertEquals(types[3], TypeUtils.getArrayComponentType(types[10]));
-        assertEquals(types[4], TypeUtils.getArrayComponentType(types[11]));
-        assertEquals(types[5], TypeUtils.getArrayComponentType(types[12]));
-        assertEquals(types[6], TypeUtils.getArrayComponentType(types[13]));
+    public void testGetArrayComponentType() throws NoSuchFieldException {
+        final Type rawListType = GenericTypeHolder.class.getDeclaredField("rawList").getGenericType();
+        final Type objectListType = GenericTypeHolder.class.getDeclaredField("objectList").getGenericType();
+        final Type unboundListType = GenericTypeHolder.class.getDeclaredField("unboundList").getGenericType();
+        final Type superObjectListType = GenericTypeHolder.class.getDeclaredField("superObjectList").getGenericType();
+        final Type stringListType = GenericTypeHolder.class.getDeclaredField("stringList").getGenericType();
+        final Type subStringListType = GenericTypeHolder.class.getDeclaredField("subStringList").getGenericType();
+        final Type superStringListType = GenericTypeHolder.class.getDeclaredField("superStringList").getGenericType();
+
+        assertNull(TypeUtils.getArrayComponentType(rawListType));
+        assertNull(TypeUtils.getArrayComponentType(objectListType));
+        assertNull(TypeUtils.getArrayComponentType(unboundListType));
+        assertNull(TypeUtils.getArrayComponentType(superObjectListType));
+        assertNull(TypeUtils.getArrayComponentType(stringListType));
+        assertNull(TypeUtils.getArrayComponentType(subStringListType));
+        assertNull(TypeUtils.getArrayComponentType(superStringListType));
+
+        final Type rawListTypeArray = GenericTypeHolder.class.getDeclaredField("rawListArray").getGenericType();
+        final Type objectListTypeArray = GenericTypeHolder.class.getDeclaredField("objectListArray").getGenericType();
+        final Type unboundListTypeArray = GenericTypeHolder.class.getDeclaredField("unboundListArray").getGenericType();
+        final Type superObjectListTypeArray = GenericTypeHolder.class.getDeclaredField("superObjectListArray").getGenericType();
+        final Type stringListTypeArray = GenericTypeHolder.class.getDeclaredField("stringListArray").getGenericType();
+        final Type subStringListTypeArray = GenericTypeHolder.class.getDeclaredField("subStringListArray").getGenericType();
+        final Type superStringListTypeArray = GenericTypeHolder.class.getDeclaredField("superStringListArray").getGenericType();
+
+        assertEquals(rawListType, TypeUtils.getArrayComponentType(rawListTypeArray));
+        assertEquals(objectListType, TypeUtils.getArrayComponentType(objectListTypeArray));
+        assertEquals(unboundListType, TypeUtils.getArrayComponentType(unboundListTypeArray));
+        assertEquals(superObjectListType, TypeUtils.getArrayComponentType(superObjectListTypeArray));
+        assertEquals(stringListType, TypeUtils.getArrayComponentType(stringListTypeArray));
+        assertEquals(subStringListType, TypeUtils.getArrayComponentType(subStringListTypeArray));
+        assertEquals(superStringListType, TypeUtils.getArrayComponentType(superStringListTypeArray));
     }
 
     @Test
@@ -431,7 +416,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testGetRawType() throws SecurityException, NoSuchFieldException {
+    public void testGetRawType() throws NoSuchFieldException {
         final Type stringParentFieldType = GenericTypeHolder.class.getDeclaredField("stringParent").getGenericType();
         final Type integerParentFieldType = GenericTypeHolder.class.getDeclaredField("integerParent").getGenericType();
         final Type foosFieldType = GenericTypeHolder.class.getDeclaredField("foos").getGenericType();
@@ -451,7 +436,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
      * Tests https://issues.apache.org/jira/browse/LANG-1697
      */
     @Test
-    public void testGetRawType_LANG_1697() throws NoSuchFieldException {
+    public void testGetRawType_LANG_1697() {
         assertEquals(int[].class, TypeUtils.getRawType(TypeUtils.genericArrayType(Integer.TYPE), Integer.TYPE));
         // LANG-1697:
         assertNull(TypeUtils.getRawType(TypeUtils.genericArrayType(TypeUtils.WILDCARD_ALL), null));
@@ -511,27 +496,38 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testIsArrayGenericTypes() throws Exception {
-        final Method method = getClass().getMethod("dummyMethod", List.class, List.class, List.class,
-                List.class, List.class, List.class, List.class, List[].class, List[].class,
-                List[].class, List[].class, List[].class, List[].class, List[].class);
-
-        final Type[] types = method.getGenericParameterTypes();
-
-        assertFalse(TypeUtils.isArrayType(types[0]));
-        assertFalse(TypeUtils.isArrayType(types[1]));
-        assertFalse(TypeUtils.isArrayType(types[2]));
-        assertFalse(TypeUtils.isArrayType(types[3]));
-        assertFalse(TypeUtils.isArrayType(types[4]));
-        assertFalse(TypeUtils.isArrayType(types[5]));
-        assertFalse(TypeUtils.isArrayType(types[6]));
-        assertTrue(TypeUtils.isArrayType(types[7]));
-        assertTrue(TypeUtils.isArrayType(types[8]));
-        assertTrue(TypeUtils.isArrayType(types[9]));
-        assertTrue(TypeUtils.isArrayType(types[10]));
-        assertTrue(TypeUtils.isArrayType(types[11]));
-        assertTrue(TypeUtils.isArrayType(types[12]));
-        assertTrue(TypeUtils.isArrayType(types[13]));
+    public void testIsArrayGenericTypes() throws NoSuchFieldException {
+        final Type rawListType = GenericTypeHolder.class.getDeclaredField("rawList").getGenericType();
+        final Type objectListType = GenericTypeHolder.class.getDeclaredField("objectList").getGenericType();
+        final Type unboundListType = GenericTypeHolder.class.getDeclaredField("unboundList").getGenericType();
+        final Type superObjectListType = GenericTypeHolder.class.getDeclaredField("superObjectList").getGenericType();
+        final Type stringListType = GenericTypeHolder.class.getDeclaredField("stringList").getGenericType();
+        final Type subStringListType = GenericTypeHolder.class.getDeclaredField("subStringList").getGenericType();
+        final Type superStringListType = GenericTypeHolder.class.getDeclaredField("superStringList").getGenericType();
+
+        assertFalse(TypeUtils.isArrayType(rawListType));
+        assertFalse(TypeUtils.isArrayType(objectListType));
+        assertFalse(TypeUtils.isArrayType(unboundListType));
+        assertFalse(TypeUtils.isArrayType(superObjectListType));
+        assertFalse(TypeUtils.isArrayType(stringListType));
+        assertFalse(TypeUtils.isArrayType(subStringListType));
+        assertFalse(TypeUtils.isArrayType(superStringListType));
+
+        final Type rawListTypeArray = GenericTypeHolder.class.getDeclaredField("rawListArray").getGenericType();
+        final Type objectListTypeArray = GenericTypeHolder.class.getDeclaredField("objectListArray").getGenericType();
+        final Type unboundListTypeArray = GenericTypeHolder.class.getDeclaredField("unboundListArray").getGenericType();
+        final Type superObjectListTypeArray = GenericTypeHolder.class.getDeclaredField("superObjectListArray").getGenericType();
+        final Type stringListTypeArray = GenericTypeHolder.class.getDeclaredField("stringListArray").getGenericType();
+        final Type subStringListTypeArray = GenericTypeHolder.class.getDeclaredField("subStringListArray").getGenericType();
+        final Type superStringListTypeArray = GenericTypeHolder.class.getDeclaredField("superStringListArray").getGenericType();
+
+        assertTrue(TypeUtils.isArrayType(rawListTypeArray));
+        assertTrue(TypeUtils.isArrayType(objectListTypeArray));
+        assertTrue(TypeUtils.isArrayType(unboundListTypeArray));
+        assertTrue(TypeUtils.isArrayType(superObjectListTypeArray));
+        assertTrue(TypeUtils.isArrayType(stringListTypeArray));
+        assertTrue(TypeUtils.isArrayType(subStringListTypeArray));
+        assertTrue(TypeUtils.isArrayType(superStringListTypeArray));
     }
 
     @Test
@@ -559,360 +555,229 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
         assertFalse(TypeUtils.isArrayType(String.class));
     }
 
-    @SuppressWarnings("boxing") // deliberately used here
     @Test
-    public void testIsAssignable() throws SecurityException, NoSuchMethodException,
-            NoSuchFieldException {
-        List list0 = null;
-        List<Object> list1;
-        List<?> list2;
-        List<? super Object> list3;
-        List<String> list4;
-        List<? extends String> list5;
-        List<? super String> list6;
-        List[] list7 = null;
-        List<Object>[] list8;
-        List<?>[] list9;
-        List<? super Object>[] list10;
-        List<String>[] list11;
-        List<? extends String>[] list12;
-        List<? super String>[] list13;
-        final Class<?> clazz = getClass();
-        final Method method = clazz.getMethod("dummyMethod", List.class, List.class, List.class,
-                List.class, List.class, List.class, List.class, List[].class, List[].class,
-                List[].class, List[].class, List[].class, List[].class, List[].class);
-        final Type[] types = method.getGenericParameterTypes();
-//        list0 = list0;
-        delegateBooleanAssertion(types, 0, 0, true);
-        list1 = list0;
-        delegateBooleanAssertion(types, 0, 1, true);
-        list0 = list1;
-        delegateBooleanAssertion(types, 1, 0, true);
-        list2 = list0;
-        delegateBooleanAssertion(types, 0, 2, true);
-        list0 = list2;
-        delegateBooleanAssertion(types, 2, 0, true);
-        list3 = list0;
-        delegateBooleanAssertion(types, 0, 3, true);
-        list0 = list3;
-        delegateBooleanAssertion(types, 3, 0, true);
-        list4 = list0;
-        delegateBooleanAssertion(types, 0, 4, true);
-        list0 = list4;
-        delegateBooleanAssertion(types, 4, 0, true);
-        list5 = list0;
-        delegateBooleanAssertion(types, 0, 5, true);
-        list0 = list5;
-        delegateBooleanAssertion(types, 5, 0, true);
-        list6 = list0;
-        delegateBooleanAssertion(types, 0, 6, true);
-        list0 = list6;
-        delegateBooleanAssertion(types, 6, 0, true);
-//        list1 = list1;
-        delegateBooleanAssertion(types, 1, 1, true);
-        list2 = list1;
-        delegateBooleanAssertion(types, 1, 2, true);
-        list1 = (List<Object>) list2;
-        delegateBooleanAssertion(types, 2, 1, false);
-        list3 = list1;
-        delegateBooleanAssertion(types, 1, 3, true);
-        list1 = (List<Object>) list3;
-        delegateBooleanAssertion(types, 3, 1, false);
-        // list4 = list1;
-        delegateBooleanAssertion(types, 1, 4, false);
-        // list1 = list4;
-        delegateBooleanAssertion(types, 4, 1, false);
-        // list5 = list1;
-        delegateBooleanAssertion(types, 1, 5, false);
-        // list1 = list5;
-        delegateBooleanAssertion(types, 5, 1, false);
-        list6 = list1;
-        delegateBooleanAssertion(types, 1, 6, true);
-        list1 = (List<Object>) list6;
-        delegateBooleanAssertion(types, 6, 1, false);
-//        list2 = list2;
-        delegateBooleanAssertion(types, 2, 2, true);
-        list2 = list3;
-        delegateBooleanAssertion(types, 2, 3, false);
-        list2 = list4;
-        delegateBooleanAssertion(types, 3, 2, true);
-        list3 = (List<? super Object>) list2;
-        delegateBooleanAssertion(types, 2, 4, false);
-        list2 = list5;
-        delegateBooleanAssertion(types, 4, 2, true);
-        list4 = (List<String>) list2;
-        delegateBooleanAssertion(types, 2, 5, false);
-        list2 = list6;
-        delegateBooleanAssertion(types, 5, 2, true);
-        list5 = (List<? extends String>) list2;
-        delegateBooleanAssertion(types, 2, 6, false);
-//        list3 = list3;
-        delegateBooleanAssertion(types, 6, 2, true);
-        list6 = (List<? super String>) list2;
-        delegateBooleanAssertion(types, 3, 3, true);
-        // list4 = list3;
-        delegateBooleanAssertion(types, 3, 4, false);
-        // list3 = list4;
-        delegateBooleanAssertion(types, 4, 3, false);
-        // list5 = list3;
-        delegateBooleanAssertion(types, 3, 5, false);
-        // list3 = list5;
-        delegateBooleanAssertion(types, 5, 3, false);
-        list6 = list3;
-        delegateBooleanAssertion(types, 3, 6, true);
-        list3 = (List<? super Object>) list6;
-        delegateBooleanAssertion(types, 6, 3, false);
-//        list4 = list4;
-        delegateBooleanAssertion(types, 4, 4, true);
-        list5 = list4;
-        delegateBooleanAssertion(types, 4, 5, true);
-        list4 = (List<String>) list5;
-        delegateBooleanAssertion(types, 5, 4, false);
-        list6 = list4;
-        delegateBooleanAssertion(types, 4, 6, true);
-        list4 = (List<String>) list6;
-        delegateBooleanAssertion(types, 6, 4, false);
-//        list5 = list5;
-        delegateBooleanAssertion(types, 5, 5, true);
-        list6 = (List<? super String>) list5;
-        delegateBooleanAssertion(types, 5, 6, false);
-        list5 = (List<? extends String>) list6;
-        delegateBooleanAssertion(types, 6, 5, false);
-//        list6 = list6;
-        delegateBooleanAssertion(types, 6, 6, true);
-
-//        list7 = list7;
-        delegateBooleanAssertion(types, 7, 7, true);
-        list8 = list7;
-        delegateBooleanAssertion(types, 7, 8, true);
-        list7 = list8;
-        delegateBooleanAssertion(types, 8, 7, true);
-        list9 = list7;
-        delegateBooleanAssertion(types, 7, 9, true);
-        list7 = list9;
-        delegateBooleanAssertion(types, 9, 7, true);
-        list10 = list7;
-        delegateBooleanAssertion(types, 7, 10, true);
-        list7 = list10;
-        delegateBooleanAssertion(types, 10, 7, true);
-        list11 = list7;
-        delegateBooleanAssertion(types, 7, 11, true);
-        list7 = list11;
-        delegateBooleanAssertion(types, 11, 7, true);
-        list12 = list7;
-        delegateBooleanAssertion(types, 7, 12, true);
-        list7 = list12;
-        delegateBooleanAssertion(types, 12, 7, true);
-        list13 = list7;
-        delegateBooleanAssertion(types, 7, 13, true);
-        list7 = list13;
-        delegateBooleanAssertion(types, 13, 7, true);
-//        list8 = list8;
-        delegateBooleanAssertion(types, 8, 8, true);
-        list9 = list8;
-        delegateBooleanAssertion(types, 8, 9, true);
-        list8 = (List<Object>[]) list9;
-        delegateBooleanAssertion(types, 9, 8, false);
-        list10 = list8;
-        delegateBooleanAssertion(types, 8, 10, true);
-        list8 = (List<Object>[]) list10; // NOTE cast is required by Sun Java, but not by Eclipse
-        delegateBooleanAssertion(types, 10, 8, false);
-        // list11 = list8;
-        delegateBooleanAssertion(types, 8, 11, false);
-        // list8 = list11;
-        delegateBooleanAssertion(types, 11, 8, false);
-        // list12 = list8;
-        delegateBooleanAssertion(types, 8, 12, false);
-        // list8 = list12;
-        delegateBooleanAssertion(types, 12, 8, false);
-        list13 = list8;
-        delegateBooleanAssertion(types, 8, 13, true);
-        list8 = (List<Object>[]) list13;
-        delegateBooleanAssertion(types, 13, 8, false);
-//        list9 = list9;
-        delegateBooleanAssertion(types, 9, 9, true);
-        list10 = (List<? super Object>[]) list9;
-        delegateBooleanAssertion(types, 9, 10, false);
-        list9 = list10;
-        delegateBooleanAssertion(types, 10, 9, true);
-        list11 = (List<String>[]) list9;
-        delegateBooleanAssertion(types, 9, 11, false);
-        list9 = list11;
-        delegateBooleanAssertion(types, 11, 9, true);
-        list12 = (List<? extends String>[]) list9;
-        delegateBooleanAssertion(types, 9, 12, false);
-        list9 = list12;
-        delegateBooleanAssertion(types, 12, 9, true);
-        list13 = (List<? super String>[]) list9;
-        delegateBooleanAssertion(types, 9, 13, false);
-        list9 = list13;
-        delegateBooleanAssertion(types, 13, 9, true);
-//        list10 = list10;
-        delegateBooleanAssertion(types, 10, 10, true);
-        // list11 = list10;
-        delegateBooleanAssertion(types, 10, 11, false);
-        // list10 = list11;
-        delegateBooleanAssertion(types, 11, 10, false);
-        // list12 = list10;
-        delegateBooleanAssertion(types, 10, 12, false);
-        // list10 = list12;
-        delegateBooleanAssertion(types, 12, 10, false);
-        list13 = list10;
-        delegateBooleanAssertion(types, 10, 13, true);
-        list10 = (List<? super Object>[]) list13;
-        delegateBooleanAssertion(types, 13, 10, false);
-//        list11 = list11;
-        delegateBooleanAssertion(types, 11, 11, true);
-        list12 = list11;
-        delegateBooleanAssertion(types, 11, 12, true);
-        list11 = (List<String>[]) list12;
-        delegateBooleanAssertion(types, 12, 11, false);
-        list13 = list11;
-        delegateBooleanAssertion(types, 11, 13, true);
-        list11 = (List<String>[]) list13;
-        delegateBooleanAssertion(types, 13, 11, false);
-//        list12 = list12;
-        delegateBooleanAssertion(types, 12, 12, true);
-        list13 = (List<? super String>[]) list12;
-        delegateBooleanAssertion(types, 12, 13, false);
-        list12 = (List<? extends String>[]) list13;
-        delegateBooleanAssertion(types, 13, 12, false);
-//        list13 = list13;
-        delegateBooleanAssertion(types, 13, 13, true);
-        final Type disType = getClass().getField("dis").getGenericType();
-        // Reporter.log( ( ( ParameterizedType ) disType
-        // ).getOwnerType().getClass().toString() );
-        final Type datType = getClass().getField("dat").getGenericType();
-        final Type daType = getClass().getField("da").getGenericType();
-        final Type uhderType = getClass().getField("uhder").getGenericType();
-        final Type dingType = getClass().getField("ding").getGenericType();
-        final Type testerType = getClass().getField("tester").getGenericType();
-        final Type tester2Type = getClass().getField("tester2").getGenericType();
-        final Type dat2Type = getClass().getField("dat2").getGenericType();
-        final Type dat3Type = getClass().getField("dat3").getGenericType();
-        dis = dat;
-        assertTrue(TypeUtils.isAssignable(datType, disType));
-        // dis = da;
-        assertFalse(TypeUtils.isAssignable(daType, disType));
-        dis = uhder;
-        assertTrue(TypeUtils.isAssignable(uhderType, disType));
-        dis = ding;
-        assertFalse(TypeUtils.isAssignable(dingType, disType),
-                String.format("type %s not assignable to %s!", dingType, disType));
-        dis = tester;
-        assertTrue(TypeUtils.isAssignable(testerType, disType));
-        // dis = tester2;
-        assertFalse(TypeUtils.isAssignable(tester2Type, disType));
-        // dat = dat2;
-        assertFalse(TypeUtils.isAssignable(dat2Type, datType));
-        // dat2 = dat;
-        assertFalse(TypeUtils.isAssignable(datType, dat2Type));
-        // dat = dat3;
-        assertFalse(TypeUtils.isAssignable(dat3Type, datType));
-        final char ch = 0;
-        final boolean bo = false;
-        final byte by = 0;
-        final short sh = 0;
-        int in = 0;
-        long lo = 0;
-        final float fl = 0;
-        double du;
-        du = ch;
+    public void testIsAssignableClasses() {
         assertTrue(TypeUtils.isAssignable(char.class, double.class));
-        du = by;
         assertTrue(TypeUtils.isAssignable(byte.class, double.class));
-        du = sh;
         assertTrue(TypeUtils.isAssignable(short.class, double.class));
-        du = in;
         assertTrue(TypeUtils.isAssignable(int.class, double.class));
-        du = lo;
         assertTrue(TypeUtils.isAssignable(long.class, double.class));
-        du = fl;
         assertTrue(TypeUtils.isAssignable(float.class, double.class));
-        lo = in;
+
         assertTrue(TypeUtils.isAssignable(int.class, long.class));
-        lo = Integer.valueOf(0);
         assertTrue(TypeUtils.isAssignable(Integer.class, long.class));
-        // Long lngW = 1;
         assertFalse(TypeUtils.isAssignable(int.class, Long.class));
-        // lngW = Integer.valueOf( 0 );
         assertFalse(TypeUtils.isAssignable(Integer.class, Long.class));
-        in = Integer.valueOf(0);
         assertTrue(TypeUtils.isAssignable(Integer.class, int.class));
-        final Integer inte = in;
         assertTrue(TypeUtils.isAssignable(int.class, Integer.class));
         assertTrue(TypeUtils.isAssignable(int.class, Number.class));
         assertTrue(TypeUtils.isAssignable(int.class, Object.class));
-        final Type intComparableType = getClass().getField("intComparable").getGenericType();
-        intComparable = 1;
-        assertTrue(TypeUtils.isAssignable(int.class, intComparableType));
         assertTrue(TypeUtils.isAssignable(int.class, Comparable.class));
-        final Serializable ser = 1;
         assertTrue(TypeUtils.isAssignable(int.class, Serializable.class));
-        final Type longComparableType = getClass().getField("longComparable").getGenericType();
-        // longComparable = 1;
-        assertFalse(TypeUtils.isAssignable(int.class, longComparableType));
-        // longComparable = Integer.valueOf( 0 );
-        assertFalse(TypeUtils.isAssignable(Integer.class, longComparableType));
-        // int[] ia;
-        // long[] la = ia;
+
         assertFalse(TypeUtils.isAssignable(int[].class, long[].class));
-        final Integer[] ia = null;
-        final Type caType = getClass().getField("intWildcardComparable").getGenericType();
-        intWildcardComparable = ia;
-        assertTrue(TypeUtils.isAssignable(Integer[].class, caType));
-        // int[] ina = ia;
         assertFalse(TypeUtils.isAssignable(Integer[].class, int[].class));
-        final int[] ina = null;
-        final Object[] oa;
-        // oa = ina;
         assertFalse(TypeUtils.isAssignable(int[].class, Object[].class));
-        oa = new Integer[0];
         assertTrue(TypeUtils.isAssignable(Integer[].class, Object[].class));
-        final Type bClassType = AClass.class.getField("bClass").getGenericType();
-        final Type cClassType = AClass.class.getField("cClass").getGenericType();
-        final Type dClassType = AClass.class.getField("dClass").getGenericType();
-        final Type eClassType = AClass.class.getField("eClass").getGenericType();
-        final Type fClassType = AClass.class.getField("fClass").getGenericType();
-        final AClass aClass = new AClass(new AAClass<>());
-        aClass.bClass = aClass.cClass;
+    }
+
+    @Test
+    public void testIsAssignableGenericComparableTypes() throws NoSuchFieldException {
+        final Type intComparableType = getClass().getField("intComparable").getGenericType();
+        assertTrue(TypeUtils.isAssignable(int.class, intComparableType));
+
+        final Type longComparableType = getClass().getField("longComparable").getGenericType();
+        assertFalse(TypeUtils.isAssignable(int.class, longComparableType));
+        assertFalse(TypeUtils.isAssignable(Integer.class, longComparableType));
+
+        final Type intComparableArrayType = getClass().getField("intWildcardComparable").getGenericType();
+        assertTrue(TypeUtils.isAssignable(Integer[].class, intComparableArrayType));
+    }
+
+    @Test
+    public void testIsAssignableGenericListTypes() throws NoSuchFieldException {
+        final Type rawListType = GenericTypeHolder.class.getDeclaredField("rawList").getGenericType();
+        final Type objectListType = GenericTypeHolder.class.getDeclaredField("objectList").getGenericType();
+        final Type unboundListType = GenericTypeHolder.class.getDeclaredField("unboundList").getGenericType();
+        final Type superObjectListType = GenericTypeHolder.class.getDeclaredField("superObjectList").getGenericType();
+        final Type stringListType = GenericTypeHolder.class.getDeclaredField("stringList").getGenericType();
+        final Type subStringListType = GenericTypeHolder.class.getDeclaredField("subStringList").getGenericType();
+        final Type superStringListType = GenericTypeHolder.class.getDeclaredField("superStringList").getGenericType();
+
+        assertTrue(TypeUtils.isAssignable(rawListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, objectListType));
+        assertTrue(TypeUtils.isAssignable(objectListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, unboundListType));
+        assertTrue(TypeUtils.isAssignable(unboundListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, superObjectListType));
+        assertTrue(TypeUtils.isAssignable(superObjectListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, stringListType));
+        assertTrue(TypeUtils.isAssignable(stringListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, subStringListType));
+        assertTrue(TypeUtils.isAssignable(subStringListType, rawListType));
+        assertTrue(TypeUtils.isAssignable(rawListType, superStringListType));
+        assertTrue(TypeUtils.isAssignable(superStringListType, rawListType));
+
+        assertTrue(TypeUtils.isAssignable(objectListType, objectListType));
+        assertTrue(TypeUtils.isAssignable(objectListType, unboundListType));
+        assertFalse(TypeUtils.isAssignable(unboundListType, objectListType));
+        assertTrue(TypeUtils.isAssignable(objectListType, superObjectListType));
+        assertFalse(TypeUtils.isAssignable(superObjectListType, objectListType));
+        assertFalse(TypeUtils.isAssignable(objectListType, stringListType));
+        assertFalse(TypeUtils.isAssignable(stringListType, objectListType));
+        assertFalse(TypeUtils.isAssignable(objectListType, subStringListType));
+        assertFalse(TypeUtils.isAssignable(subStringListType, objectListType));
+        assertTrue(TypeUtils.isAssignable(objectListType, superStringListType));
+        assertFalse(TypeUtils.isAssignable(superStringListType, objectListType));
+
+        assertTrue(TypeUtils.isAssignable(unboundListType, unboundListType));
+        assertFalse(TypeUtils.isAssignable(unboundListType, superObjectListType));
+        assertTrue(TypeUtils.isAssignable(superObjectListType, unboundListType));
+        assertFalse(TypeUtils.isAssignable(unboundListType, stringListType));
+        assertTrue(TypeUtils.isAssignable(stringListType, unboundListType));
+        assertFalse(TypeUtils.isAssignable(unboundListType, subStringListType));
+        assertTrue(TypeUtils.isAssignable(subStringListType, unboundListType));
+        assertFalse(TypeUtils.isAssignable(unboundListType, superStringListType));
+        assertTrue(TypeUtils.isAssignable(superStringListType, unboundListType));
+
+        assertTrue(TypeUtils.isAssignable(superObjectListType, superObjectListType));
+        assertFalse(TypeUtils.isAssignable(superObjectListType, stringListType));
+        assertFalse(TypeUtils.isAssignable(stringListType, superObjectListType));
+        assertFalse(TypeUtils.isAssignable(superObjectListType, subStringListType));
+        assertFalse(TypeUtils.isAssignable(subStringListType, superObjectListType));
+        assertTrue(TypeUtils.isAssignable(superObjectListType, superStringListType));
+        assertFalse(TypeUtils.isAssignable(superStringListType, superObjectListType));
+
+        assertTrue(TypeUtils.isAssignable(stringListType, stringListType));
+        assertTrue(TypeUtils.isAssignable(stringListType, subStringListType));
+        assertFalse(TypeUtils.isAssignable(subStringListType, stringListType));
+        assertTrue(TypeUtils.isAssignable(stringListType, superStringListType));
+        assertFalse(TypeUtils.isAssignable(superStringListType, stringListType));
+
+        assertTrue(TypeUtils.isAssignable(subStringListType, subStringListType));
+        assertFalse(TypeUtils.isAssignable(subStringListType, superStringListType));
+        assertFalse(TypeUtils.isAssignable(superStringListType, subStringListType));
+        assertTrue(TypeUtils.isAssignable(superStringListType, superStringListType));
+    }
+
+    @Test
+    public void testIsAssignableGenericListArrays() throws NoSuchFieldException {
+        final Type rawListTypeArray = GenericTypeHolder.class.getDeclaredField("rawListArray").getGenericType();
+        final Type objectListTypeArray = GenericTypeHolder.class.getDeclaredField("objectListArray").getGenericType();
+        final Type unboundListTypeArray = GenericTypeHolder.class.getDeclaredField("unboundListArray").getGenericType();
+        final Type superObjectListTypeArray = GenericTypeHolder.class.getDeclaredField("superObjectListArray").getGenericType();
+        final Type stringListTypeArray = GenericTypeHolder.class.getDeclaredField("stringListArray").getGenericType();
+        final Type subStringListTypeArray = GenericTypeHolder.class.getDeclaredField("subStringListArray").getGenericType();
+        final Type superStringListTypeArray = GenericTypeHolder.class.getDeclaredField("superStringListArray").getGenericType();
+
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, objectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(objectListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, unboundListTypeArray));
+        assertTrue(TypeUtils.isAssignable(unboundListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, superObjectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superObjectListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, stringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(stringListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, subStringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(subStringListTypeArray, rawListTypeArray));
+        assertTrue(TypeUtils.isAssignable(rawListTypeArray, superStringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superStringListTypeArray, rawListTypeArray));
+
+        assertTrue(TypeUtils.isAssignable(objectListTypeArray, objectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(objectListTypeArray, unboundListTypeArray));
+        assertFalse(TypeUtils.isAssignable(unboundListTypeArray, objectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(objectListTypeArray, superObjectListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superObjectListTypeArray, objectListTypeArray));
+        assertFalse(TypeUtils.isAssignable(objectListTypeArray, stringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(stringListTypeArray, objectListTypeArray));
+        assertFalse(TypeUtils.isAssignable(objectListTypeArray, subStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(subStringListTypeArray, objectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(objectListTypeArray, superStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superStringListTypeArray, objectListTypeArray));
+
+        assertTrue(TypeUtils.isAssignable(unboundListTypeArray, unboundListTypeArray));
+        assertFalse(TypeUtils.isAssignable(unboundListTypeArray, superObjectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superObjectListTypeArray, unboundListTypeArray));
+        assertFalse(TypeUtils.isAssignable(unboundListTypeArray, stringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(stringListTypeArray, unboundListTypeArray));
+        assertFalse(TypeUtils.isAssignable(unboundListTypeArray, subStringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(subStringListTypeArray, unboundListTypeArray));
+        assertFalse(TypeUtils.isAssignable(unboundListTypeArray, superStringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superStringListTypeArray, unboundListTypeArray));
+
+        assertTrue(TypeUtils.isAssignable(superObjectListTypeArray, superObjectListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superObjectListTypeArray, stringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(stringListTypeArray, superObjectListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superObjectListTypeArray, subStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(subStringListTypeArray, superObjectListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superObjectListTypeArray, superStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superStringListTypeArray, superObjectListTypeArray));
+
+        assertTrue(TypeUtils.isAssignable(stringListTypeArray, stringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(stringListTypeArray, subStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(subStringListTypeArray, stringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(stringListTypeArray, superStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superStringListTypeArray, stringListTypeArray));
+
+        assertTrue(TypeUtils.isAssignable(subStringListTypeArray, subStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(subStringListTypeArray, superStringListTypeArray));
+        assertFalse(TypeUtils.isAssignable(superStringListTypeArray, subStringListTypeArray));
+        assertTrue(TypeUtils.isAssignable(superStringListTypeArray, superStringListTypeArray));
+    }
+
+    @Test
+    public void testIsAssignableDirectClassHierarchy() throws NoSuchFieldException {
+        final Type bClassType = AClass.class.getField("bClass").getGenericType(); // B is superclass
+        final Type cClassType = AClass.class.getField("cClass").getGenericType(); // C subclass of B
+        final Type dClassType = AClass.class.getField("dClass").getGenericType(); // D subclass of C
+        final Type eClassType = AClass.class.getField("eClass").getGenericType(); // E subclass of D
+        final Type fClassType = AClass.class.getField("fClass").getGenericType(); // F subclass of E
+
         assertTrue(TypeUtils.isAssignable(cClassType, bClassType));
-        aClass.bClass = aClass.dClass;
         assertTrue(TypeUtils.isAssignable(dClassType, bClassType));
-        aClass.bClass = aClass.eClass;
         assertTrue(TypeUtils.isAssignable(eClassType, bClassType));
-        aClass.bClass = aClass.fClass;
         assertTrue(TypeUtils.isAssignable(fClassType, bClassType));
-        aClass.cClass = aClass.dClass;
+
         assertTrue(TypeUtils.isAssignable(dClassType, cClassType));
-        aClass.cClass = aClass.eClass;
         assertTrue(TypeUtils.isAssignable(eClassType, cClassType));
-        aClass.cClass = aClass.fClass;
         assertTrue(TypeUtils.isAssignable(fClassType, cClassType));
-        aClass.dClass = aClass.eClass;
+
         assertTrue(TypeUtils.isAssignable(eClassType, dClassType));
-        aClass.dClass = aClass.fClass;
         assertTrue(TypeUtils.isAssignable(fClassType, dClassType));
-        aClass.eClass = aClass.fClass;
+
         assertTrue(TypeUtils.isAssignable(fClassType, eClassType));
     }
 
-    private void testIsAssignable(final Class testUnassignableClass) {
-        final Class<Constructor> rawClass = Constructor.class;
-        final Class<Insets> typeArgClass = Insets.class;
-        // Builds a ParameterizedType for Constructor<Insets>
-        final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass);
-        assertEquals(rawClass, paramType.getRawType());
-        assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]);
+    @Test
+    public void testIsAssignableGenericClassHierarchy() throws NoSuchFieldException {
+        /*
+         *            <<This>>
+         *      /      /     \     \
+         * <<And>>   That   Other   Tester
+         *      \   /         |
+         *       The        Thing
+         */
+        final Type disType = getClass().getField("dis").getGenericType();       // This is superinterface
+        final Type datType = getClass().getField("dat").getGenericType();       // That implements This
+        final Type dat2Type = getClass().getField("dat2").getGenericType();
+        final Type dat3Type = getClass().getField("dat3").getGenericType();
+        final Type daType = getClass().getField("da").getGenericType();         // The extends That and implements And
+        final Type uhderType = getClass().getField("uhder").getGenericType();   // Other implements This
+        final Type dingType = getClass().getField("ding").getGenericType();     // Thing extends Other
+        final Type testerType = getClass().getField("tester").getGenericType(); // Tester implements This
+        final Type tester2Type = getClass().getField("tester2").getGenericType();
 
-        assertFalse(testUnassignableClass.isAssignableFrom(paramType.getClass()));
-        assertFalse(paramType.getClass().isAssignableFrom(testUnassignableClass));
+        assertTrue(TypeUtils.isAssignable(datType, disType));
+        assertFalse(TypeUtils.isAssignable(daType, disType));
+        assertTrue(TypeUtils.isAssignable(uhderType, disType));
+        assertFalse(TypeUtils.isAssignable(dingType, disType));
+        assertTrue(TypeUtils.isAssignable(testerType, disType));
+        assertFalse(TypeUtils.isAssignable(tester2Type, disType));
 
-        final GenericArrayType arrayType = TypeUtils.genericArrayType(paramType);
-        assertFalse(TypeUtils.isAssignable(arrayType, paramType),
-                () -> String.format("TypeUtils.isAssignable(%s, %s)", arrayType, paramType));
-        assertFalse(TypeUtils.isAssignable(paramType, arrayType),
-                () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, arrayType));
+        assertFalse(TypeUtils.isAssignable(dat2Type, datType));
+        assertFalse(TypeUtils.isAssignable(datType, dat2Type));
+        assertFalse(TypeUtils.isAssignable(dat3Type, datType));
     }
 
     @Test
@@ -977,12 +842,10 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
 
     @SuppressWarnings("boxing") // boxing is deliberate here
     @Test
-    public void testIsInstance() throws SecurityException, NoSuchFieldException {
+    public void testIsInstance() throws NoSuchFieldException {
         final Type intComparableType = getClass().getField("intComparable").getGenericType();
         final Type uriComparableType = getClass().getField("uriComparable").getGenericType();
-        intComparable = 1;
         assertTrue(TypeUtils.isInstance(1, intComparableType));
-        // uriComparable = 1;
         assertFalse(TypeUtils.isInstance(1, uriComparableType));
     }
 
@@ -999,7 +862,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testParameterize() throws Exception {
+    public void testParameterize() throws NoSuchFieldException {
         final ParameterizedType stringComparableType = TypeUtils.parameterize(Comparable.class, String.class);
         assertTrue(TypeUtils.equals(getClass().getField("stringComparable").getGenericType(),
             stringComparableType));
@@ -1028,7 +891,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testParameterizeWithOwner() throws Exception {
+    public void testParameterizeWithOwner() throws NoSuchFieldException {
         final Type owner = TypeUtils.parameterize(TypeUtilsTest.class, String.class);
         final ParameterizedType dat2Type = TypeUtils.parameterizeWithOwner(owner, That.class, String.class, String.class);
         assertTrue(TypeUtils.equals(getClass().getField("dat2").getGenericType(), dat2Type));
@@ -1064,8 +927,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testTypesSatisfyVariables() throws SecurityException,
-            NoSuchMethodException {
+    public void testTypesSatisfyVariables() throws NoSuchMethodException {
         final Map<TypeVariable<?>, Type> typeVarAssigns = new HashMap<>();
         final Integer max = TypeUtilsTest.<Integer>stub();
         typeVarAssigns.put(getClass().getMethod("stub").getTypeParameters()[0], Integer.class);
@@ -1096,7 +958,7 @@ public class TypeUtilsTest<B> extends AbstractLangTest {
     }
 
     @Test
-    public void testWildcardType() throws Exception {
+    public void testWildcardType() throws NoSuchFieldException {
         final WildcardType simpleWildcard = TypeUtils.wildcardType().withUpperBounds(String.class).build();
         final Field cClass = AClass.class.getField("cClass");
         assertTrue(TypeUtils.equals(((ParameterizedType) cClass.getGenericType()).getActualTypeArguments()[0],
diff --git a/src/test/java/org/apache/commons/lang3/reflect/testbed/GenericTypeHolder.java b/src/test/java/org/apache/commons/lang3/reflect/testbed/GenericTypeHolder.java
index 390044cdd..be8008f5d 100644
--- a/src/test/java/org/apache/commons/lang3/reflect/testbed/GenericTypeHolder.java
+++ b/src/test/java/org/apache/commons/lang3/reflect/testbed/GenericTypeHolder.java
@@ -21,9 +21,24 @@ import java.util.List;
 /**
  * Holds generic testbed types.
  */
+@SuppressWarnings("rawtypes")
 public class GenericTypeHolder {
     public GenericParent<String> stringParent;
     public GenericParent<Integer> integerParent;
     public List<Foo> foos;
     public GenericParent<Bar>[] barParents;
+    public List rawList;
+    public List<Object> objectList;
+    public List<?> unboundList;
+    public List<? super Object> superObjectList;
+    public List<String> stringList;
+    public List<? extends String> subStringList;
+    public List<? super String> superStringList;
+    public List[] rawListArray;
+    public List<Object>[] objectListArray;
+    public List<?>[] unboundListArray;
+    public List<? super Object>[] superObjectListArray;
+    public List<String>[] stringListArray;
+    public List<? extends String>[] subStringListArray;
+    public List<? super String>[] superStringListArray;
 }
diff --git a/src/test/java/org/apache/commons/lang3/text/ExtendedMessageFormatTest.java b/src/test/java/org/apache/commons/lang3/text/ExtendedMessageFormatTest.java
index a7c5fb47e..e4127e295 100644
--- a/src/test/java/org/apache/commons/lang3/text/ExtendedMessageFormatTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/ExtendedMessageFormatTest.java
@@ -201,14 +201,14 @@ public class ExtendedMessageFormatTest extends AbstractLangTest {
         buffer.append(locale);
         buffer.append("]");
         final MessageFormat mf = createMessageFormat(pattern, locale);
-        ExtendedMessageFormat emf = null;
+        ExtendedMessageFormat emf;
         if (locale == null) {
             emf = new ExtendedMessageFormat(pattern);
         } else {
             emf = new ExtendedMessageFormat(pattern, locale);
         }
-        assertEquals(mf.format(args), emf.format(args), "format "    + buffer.toString());
-        assertEquals(mf.toPattern(), emf.toPattern(), "toPattern " + buffer.toString());
+        assertEquals(mf.format(args), emf.format(args), "format "    + buffer);
+        assertEquals(mf.toPattern(), emf.toPattern(), "toPattern " + buffer);
     }
 
     /**
@@ -395,47 +395,67 @@ public class ExtendedMessageFormatTest extends AbstractLangTest {
         assertEquals("it's a dummy test!", emf.format(new Object[] {"DUMMY"}));
     }
     /**
-     * Test extended and built in formats.
+     * Test extended and built-in formats with available locales.
      */
     @Test
-    public void testExtendedAndBuiltInFormats() {
+    public void testExtendedAndBuiltInFormatsWithAvailableLocales() {
+        final String extendedPattern = "Name: {0,upper} ";
+        final String builtinsPattern = "DOB: {1,date,short} Salary: {2,number,currency}";
+        final String pattern = extendedPattern + builtinsPattern;
+
         final Calendar cal = Calendar.getInstance();
         cal.set(2007, Calendar.JANUARY, 23, 18, 33, 5);
         final Object[] args = {"John Doe", cal.getTime(), Double.valueOf("12345.67")};
-        final String builtinsPattern = "DOB: {1,date,short} Salary: {2,number,currency}";
-        final String extendedPattern = "Name: {0,upper} ";
-        final String pattern = extendedPattern + builtinsPattern;
 
         final HashSet<Locale> testLocales = new HashSet<>(Arrays.asList(DateFormat.getAvailableLocales()));
         testLocales.retainAll(Arrays.asList(NumberFormat.getAvailableLocales()));
-        testLocales.add(null);
 
         for (final Locale locale : testLocales) {
             final MessageFormat builtins = createMessageFormat(builtinsPattern, locale);
             final String expectedPattern = extendedPattern + builtins.toPattern();
-            DateFormat df = null;
-            NumberFormat nf = null;
-            ExtendedMessageFormat emf = null;
-            if (locale == null) {
-                df = DateFormat.getDateInstance(DateFormat.SHORT);
-                nf = NumberFormat.getCurrencyInstance();
-                emf = new ExtendedMessageFormat(pattern, registry);
-            } else {
-                df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-                nf = NumberFormat.getCurrencyInstance(locale);
-                emf = new ExtendedMessageFormat(pattern, locale, registry);
-            }
+            final ExtendedMessageFormat emf = new ExtendedMessageFormat(pattern, locale, registry);
+            assertEquals(expectedPattern, emf.toPattern(), "pattern comparison for locale " + locale);
+
+            final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+            final NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
             final StringBuilder expected = new StringBuilder();
             expected.append("Name: ");
-            expected.append(args[0].toString().toUpperCase(Locale.ROOT));
+            expected.append(args[0].toString().toUpperCase(locale));
             expected.append(" DOB: ");
             expected.append(df.format(args[1]));
             expected.append(" Salary: ");
             expected.append(nf.format(args[2]));
-            assertEquals(expectedPattern, emf.toPattern(), "pattern comparison for locale " + locale);
             assertEquals(expected.toString(), emf.format(args), String.valueOf(locale));
         }
     }
+    /**
+     * Test extended and built-in formats with the default locale.
+     */
+    @Test
+    public void testExtendedAndBuiltInFormatsWithDefaultLocale() {
+        final String extendedPattern = "Name: {0,upper} ";
+        final String builtinsPattern = "DOB: {1,date,short} Salary: {2,number,currency}";
+        final String pattern = extendedPattern + builtinsPattern;
+
+        final ExtendedMessageFormat emf = new ExtendedMessageFormat(pattern, registry);
+        final MessageFormat builtins = createMessageFormat(builtinsPattern, null);
+        final String expectedPattern = extendedPattern + builtins.toPattern();
+        assertEquals(expectedPattern, emf.toPattern(), "pattern comparison for default locale");
+
+        final Calendar cal = Calendar.getInstance();
+        cal.set(2007, Calendar.JANUARY, 23, 18, 33, 5);
+        final Object[] args = {"John Doe", cal.getTime(), Double.valueOf("12345.67")};
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
+        final NumberFormat nf = NumberFormat.getCurrencyInstance();
+        final StringBuilder expected = new StringBuilder();
+        expected.append("Name: ");
+        expected.append(args[0].toString().toUpperCase());
+        expected.append(" DOB: ");
+        expected.append(df.format(args[1]));
+        expected.append(" Salary: ");
+        expected.append(nf.format(args[2]));
+        assertEquals(expected.toString(), emf.format(args));
+    }
     /**
      * Test extended formats.
      */
diff --git a/src/test/java/org/apache/commons/lang3/text/StrBuilderAppendInsertTest.java b/src/test/java/org/apache/commons/lang3/text/StrBuilderAppendInsertTest.java
index e088a257e..634606953 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderAppendInsertTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderAppendInsertTest.java
@@ -994,9 +994,9 @@ public class StrBuilderAppendInsertTest extends AbstractLangTest {
         sb.appendSeparator(standardSeparator, startSeparator);  // no effect
         assertEquals(String.valueOf(startSeparator), sb.toString());
         sb.append(foo);
-        assertEquals(String.valueOf(startSeparator) + foo, sb.toString());
+        assertEquals(startSeparator + foo, sb.toString());
         sb.appendSeparator(standardSeparator, startSeparator);
-        assertEquals(String.valueOf(startSeparator) + foo + standardSeparator, sb.toString());
+        assertEquals(startSeparator + foo + standardSeparator, sb.toString());
     }
 
     @Test
diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
index cb9700754..49bb8ae2a 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
@@ -82,7 +82,7 @@ public class DateUtilsTest extends AbstractLangTest {
     private static void assertWeekIterator(final Iterator<?> it, final Calendar start, final Calendar end) {
         Calendar cal = (Calendar) it.next();
         assertCalendarsEquals("", start, cal, 0);
-        Calendar last = null;
+        Calendar last;
         int count = 1;
         while (it.hasNext()) {
             //Check this is just a date (no time component)
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
index 7ce2b4720..fbff75e3a 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
@@ -136,9 +136,9 @@ public class FastDateParserSDFTest extends AbstractLangTest {
             fdfE = e.getClass();
         }
         if (valid) {
-            assertEquals(expectedTime, actualTime, locale.toString()+" "+formattedDate +"\n");
+            assertEquals(expectedTime, actualTime, locale + " " + formattedDate + "\n");
         } else {
-            assertEquals(sdfE, fdfE, locale.toString()+" "+formattedDate + " expected same Exception ");
+            assertEquals(sdfE, fdfE, locale + " " + formattedDate + " expected same Exception ");
         }
     }
 
@@ -173,7 +173,7 @@ public class FastDateParserSDFTest extends AbstractLangTest {
             final int endIndex = fdfP.getIndex();
             final int length = formattedDate.length();
             assertEquals(length, endIndex, "Expected FDF to parse full string " + fdfP);
-            assertEquals(expectedTime, actualTime, locale.toString()+" "+formattedDate +"\n");
+            assertEquals(expectedTime, actualTime, locale +" "+formattedDate +"\n");
         } else {
             assertNotEquals(-1, fdferrorIndex, "Test data error: expected FDF parse to fail, but got " + actualTime);
             assertTrue(sdferrorIndex - fdferrorIndex <= 4,
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
index c46498caf..b75aeb748 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
@@ -145,7 +145,7 @@ public class FastDateParser_TimeZoneStrategyTest extends AbstractLangTest {
                     }
                     // Hack End
                     fail(String.format("%s: with locale = %s, zIndex = %,d, tzDisplay = '%s', parser = '%s'", e,
-                            localeStr, zIndex, tzDisplay, parser.toString()), e);
+                            localeStr, zIndex, tzDisplay, parser), e);
                 }
             }
         }
diff --git a/src/test/java/org/apache/commons/lang3/util/FluentBitSetTest.java b/src/test/java/org/apache/commons/lang3/util/FluentBitSetTest.java
index 285b4ddcd..cde857ecc 100644
--- a/src/test/java/org/apache/commons/lang3/util/FluentBitSetTest.java
+++ b/src/test/java/org/apache/commons/lang3/util/FluentBitSetTest.java
@@ -506,7 +506,7 @@ public class FluentBitSetTest extends AbstractLangTest {
     public void test_ConstructorInt() {
         FluentBitSet bs = newInstance(128);
         assertEquals(128, bs.size(), "Create FluentBitSet of incorrect size");
-        assertEquals("{}", bs.toString(), "New FluentBitSet had invalid string representation: " + bs.toString());
+        assertEquals("{}", bs.toString(), "New FluentBitSet had invalid string representation: " + bs);
         // All BitSets are created with elements of multiples of 64
         bs = newInstance(89);
         assertEquals(128, bs.size(), "Failed to round FluentBitSet element size");