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

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 77d0e93  JUNEAU-197
77d0e93 is described below

commit 77d0e9392adc7d6122394789bcf91d59f774d89f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Mar 8 16:34:27 2020 -0400

    JUNEAU-197
    
    @BeanConfig(bpi) does not override @Bean(bpi)
---
 .../apache/juneau/config/internal/ConfigMap.java   |   2 +-
 .../juneau/internal/ReadOnlyArrayListTest.java     |  12 +-
 .../juneau/reflection/ExecutableInfoTest.java      |   4 +-
 .../org/apache/juneau/httppart/bean/Utils.java     |   7 +-
 .../apache/juneau/internal/CollectionUtils.java    |  43 ++-----
 ...adOnlyArrayList.java => UnmodifiableArray.java} |   8 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  | 136 ++++++++++-----------
 .../org/apache/juneau/reflect/ConstructorInfo.java |   2 +-
 .../org/apache/juneau/reflect/ExecutableInfo.java  |  66 +++++-----
 .../java/org/apache/juneau/reflect/MethodInfo.java |  30 +++--
 .../java/org/apache/juneau/rest/RestContext.java   |  10 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |   6 +-
 .../juneau/rest/annotation/RestConfigApply.java    |   2 +-
 .../rest/annotation/RestResourceConfigApply.java   |   2 +-
 14 files changed, 154 insertions(+), 176 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
index cd25896..b00f672 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
@@ -120,7 +120,7 @@ public class ConfigMap implements ConfigStoreListener {
                }
 
                List<Import> irl = new ArrayList<>(imports.size());
-               for (ConfigMap ic : iterable(imports.values(), true))
+               for (ConfigMap ic : riterable(imports.values()))
                        irl.add(new Import(ic).register(listeners));
                this.imports.addAll(irl);
 
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/internal/ReadOnlyArrayListTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/internal/ReadOnlyArrayListTest.java
index cdb4e8d..99261dc 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/internal/ReadOnlyArrayListTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/internal/ReadOnlyArrayListTest.java
@@ -21,12 +21,12 @@ import org.junit.*;
 @SuppressWarnings("unchecked")
 public class ReadOnlyArrayListTest {
 
-       private static <T> ReadOnlyArrayList<T> create(T...t) {
-               return new ReadOnlyArrayList<>(t);
+       private static <T> UnmodifiableArray<T> create(T...t) {
+               return new UnmodifiableArray<>(t);
        }
 
-       private static <T> ReadOnlyArrayList<T> createReversed(T...t) {
-               return new ReadOnlyArrayList<>(t, true);
+       private static <T> UnmodifiableArray<T> createReversed(T...t) {
+               return new UnmodifiableArray<>(t, true);
        }
 
        @Test
@@ -99,7 +99,7 @@ public class ReadOnlyArrayListTest {
        @Test
        public void testToArray() {
                String[] s = new String[]{"a"};
-               List<String> l = new ReadOnlyArrayList<>(s);
+               List<String> l = new UnmodifiableArray<>(s);
                String[] s2 = (String[])l.toArray();
                assertEquals("a", s2[0]);
                s2[0] = "b";
@@ -109,7 +109,7 @@ public class ReadOnlyArrayListTest {
        @Test
        public void testToArray2() {
                String[] s = new String[]{"a"};
-               List<String> l = new ReadOnlyArrayList<>(s);
+               List<String> l = new UnmodifiableArray<>(s);
                String[] s2 = l.toArray(new String[l.size()]);
                assertEquals("a", s2[0]);
                s2[0] = "b";
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
index 7b64148..d3b7ff8 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
@@ -258,9 +258,9 @@ public class ExecutableInfoTest {
        @Test
        public void getRawParameters() {
                check("", b_c1.getRawParameters());
-               
assertTrue(b_c2.getRawParameters()[0].toString().startsWith("java.lang.String 
"));
+               
assertTrue(b_c2.getRawParameters().get(0).toString().startsWith("java.lang.String
 "));
                check("", b_m1.getRawParameters());
-               
assertTrue(b_m2.getRawParameters()[0].toString().startsWith("java.lang.String 
"));
+               
assertTrue(b_m2.getRawParameters().get(0).toString().startsWith("java.lang.String
 "));
        }
 
        @Test
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/Utils.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/Utils.java
index 424f295..efa454a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/Utils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/Utils.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.httppart.bean;
 
 import java.lang.annotation.*;
+import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.reflect.*;
@@ -42,10 +43,10 @@ class Utils {
        }
 
        static void assertArgType(MethodInfo m, Class<? extends Annotation> a, 
Class<?>...c) throws InvalidAnnotationException {
-               Class<?>[] ptt = m.getRawParamTypes();
-               if (ptt.length != 1)
+               List<Class<?>> ptt = m.getRawParamTypes();
+               if (ptt.size() != 1)
                        throw new InvalidAnnotationException("Only one 
parameter can be passed to method with @{0} annotation.  Method=''{0}''", 
a.getSimpleName(), m);
-               Class<?> rt = ptt[0];
+               Class<?> rt = ptt.get(0);
                for (Class<?> cc : c)
                        if (rt == cc)
                                return;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
index 58cbe4f..d778f46 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
@@ -74,29 +74,13 @@ public final class CollectionUtils {
        }
 
        /**
-        * Returns an iterable over the specified collection.
+        * Returns an iterable over the specified collection in reverse order.
         *
         * @param c The collection to iterate over.
-        * @param reverse If <jk>true</jk>, iterate in reverse order.
         * @return An iterable over the collection.
         */
-       public static <T> Iterable<T> iterable(final Collection<T> c, boolean 
reverse) {
-               if (reverse)
-                       return new ReverseIterable<>(c instanceof List ? 
(List<T>)c : new ArrayList<>(c));
-               return c;
-       }
-
-       /**
-        * Returns an iterable over the specified list.
-        *
-        * @param c The collection to iterate over.
-        * @param reverse If <jk>true</jk>, iterate in reverse order.
-        * @return An iterable over the collection.
-        */
-       public static <T> Iterable<T> iterable(final List<T> c, boolean 
reverse) {
-               if (reverse)
-                       return new ReverseIterable<>(c);
-               return c;
+       public static <T> Iterable<T> riterable(final Collection<T> c) {
+               return new ReverseIterable<>(c instanceof List ? (List<T>)c : 
new ArrayList<>(c));
        }
 
        /**
@@ -105,21 +89,8 @@ public final class CollectionUtils {
         * @param c The collection to iterate over.
         * @return An iterable over the collection.
         */
-       public static <T> Iterable<T> reverseIterable(final List<T> c) {
-               return iterable(c, true);
-       }
-
-       /**
-        * Returns an iterable over the specified array.
-        *
-        * @param c The collection to iterate over.
-        * @param reverse If <jk>true</jk>, iterate in reverse order.
-        * @return An iterable over the collection.
-        */
-       public static <T> Iterable<T> iterable(T[] c, boolean reverse) {
-               if (reverse)
-                       return new ReverseIterable<>(Arrays.asList(c));
-               return Arrays.asList(c);
+       public static <T> Iterable<T> riterable(final List<T> c) {
+               return new ReverseIterable<>(c);
        }
 
        /**
@@ -128,8 +99,8 @@ public final class CollectionUtils {
         * @param c The collection to iterate over.
         * @return An iterable over the collection.
         */
-       public static <T> Iterable<T> reverseIterable(T[] c) {
-               return iterable(c, true);
+       public static <T> Iterable<T> riterable(T[] c) {
+               return new ReverseIterable<>(Arrays.asList(c));
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReadOnlyArrayList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/UnmodifiableArray.java
similarity index 96%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReadOnlyArrayList.java
rename to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/UnmodifiableArray.java
index eda8e16..935518a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReadOnlyArrayList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/UnmodifiableArray.java
@@ -24,7 +24,7 @@ import java.util.*;
  *
  * @param <T> Array element type.
  */
-public class ReadOnlyArrayList<T> implements List<T> {
+public class UnmodifiableArray<T> implements List<T> {
 
        final T[] array;
        final int length;
@@ -35,7 +35,7 @@ public class ReadOnlyArrayList<T> implements List<T> {
         *
         * @param array The array being wrapped.
         */
-       public ReadOnlyArrayList(T[] array) {
+       public UnmodifiableArray(T[] array) {
                this(array, false);
        }
 
@@ -46,7 +46,7 @@ public class ReadOnlyArrayList<T> implements List<T> {
         * @param reversed <jk>true</jk> if elements of array should be 
addressed in reverse.
         */
        @SuppressWarnings("unchecked")
-       public ReadOnlyArrayList(T[] array, boolean reversed) {
+       public UnmodifiableArray(T[] array, boolean reversed) {
                this.array = array == null ? (T[])new Object[0] : array;
                this.length = this.array.length;
                this.reversed = reversed;
@@ -110,6 +110,8 @@ public class ReadOnlyArrayList<T> implements List<T> {
        @Override
        @SuppressWarnings({ "unchecked", "hiding" })
        public <T> T[] toArray(T[] a) {
+               if (a.length < length)
+                       return (T[])toArray();
                for (int i = 0; i < array.length; i++)
                        a[i] = reversed ? (T)array[length-i-1] : (T)array[i];
                return a;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index c3fcc9c..488c011 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -216,11 +216,11 @@ public final class ClassInfo {
         */
        public ClassInfo resolved() {
                if (Value.isType(t))
-                       return 
of(Value.getParameterType(t)).getProxiedClassInfo();
-               return getProxiedClassInfo();
+                       return 
of(Value.getParameterType(t))._getProxiedClassInfo();
+               return _getProxiedClassInfo();
        }
 
-       private ClassInfo getProxiedClassInfo() {
+       private ClassInfo _getProxiedClassInfo() {
                return proxyFor == null ? this : proxyFor;
        }
 
@@ -249,7 +249,7 @@ public final class ClassInfo {
         *      <br>Results are in the same order as {@link 
Class#getInterfaces()}.
         */
        public List<ClassInfo> getDeclaredInterfaces() {
-               return new ReadOnlyArrayList<>(getDeclaredInterfacesInternal());
+               return new UnmodifiableArray<>(_getDeclaredInterfaces());
        }
 
        /**
@@ -260,7 +260,7 @@ public final class ClassInfo {
         *      <br>Results are in child-to-parent order.
         */
        public List<ClassInfo> getInterfacesChildFirst() {
-               return new ReadOnlyArrayList<>(getInterfacesInternal());
+               return new UnmodifiableArray<>(_getInterfaces());
        }
 
        /**
@@ -271,7 +271,7 @@ public final class ClassInfo {
         *      <br>Results are in parent-to-child order.
         */
        public List<ClassInfo> getInterfacesParentFirst() {
-               return new ReadOnlyArrayList<>(getInterfacesInternal(), true);
+               return new UnmodifiableArray<>(_getInterfaces(), true);
        }
 
        /**
@@ -284,7 +284,7 @@ public final class ClassInfo {
         *      <br>Results are in child-to-parent order.
         */
        public List<ClassInfo> getParentsChildFirst() {
-               return new ReadOnlyArrayList<>(getParentsInternal());
+               return new UnmodifiableArray<>(_getParents());
        }
 
        /**
@@ -297,7 +297,7 @@ public final class ClassInfo {
         *      <br>Results are in parent-to-child order.
         */
        public List<ClassInfo> getParentsParentFirst() {
-               return new ReadOnlyArrayList<>(getParentsInternal(), true);
+               return new UnmodifiableArray<>(_getParents(), true);
        }
 
        /**
@@ -307,7 +307,7 @@ public final class ClassInfo {
         *      <br>Results are ordered child-to-parent order with classes 
listed before interfaces.
         */
        public List<ClassInfo> getAllParentsChildFirst() {
-               return new ReadOnlyArrayList<>(getAllParentsInternal());
+               return new UnmodifiableArray<>(_getAllParents());
        }
 
        /**
@@ -317,10 +317,10 @@ public final class ClassInfo {
         *      <br>Results are ordered parent-to-child order with interfaces 
listed before classes.
         */
        public List<ClassInfo> getAllParentsParentFirst() {
-               return new ReadOnlyArrayList<>(getAllParentsInternal(), true);
+               return new UnmodifiableArray<>(_getAllParents(), true);
        }
 
-       private ClassInfo[] getInterfacesInternal() {
+       private ClassInfo[] _getInterfaces() {
                if (interfaces == null) {
                        Set<ClassInfo> s = new LinkedHashSet<>();
                        for (ClassInfo ci : getParentsChildFirst())
@@ -334,7 +334,7 @@ public final class ClassInfo {
                return interfaces;
        }
 
-       private ClassInfo[] getDeclaredInterfacesInternal() {
+       private ClassInfo[] _getDeclaredInterfaces() {
                if (declaredInterfaces == null) {
                        Class<?>[] ii = c == null ? new Class[0] : 
c.getInterfaces();
                        ClassInfo[] l = new ClassInfo[ii.length];
@@ -345,7 +345,7 @@ public final class ClassInfo {
                return declaredInterfaces;
        }
 
-       private ClassInfo[] getParentsInternal() {
+       private ClassInfo[] _getParents() {
                if (parents == null) {
                        List<ClassInfo> l = new ArrayList<>();
                        Class<?> pc = c;
@@ -358,9 +358,9 @@ public final class ClassInfo {
                return parents;
        }
 
-       private ClassInfo[] getAllParentsInternal() {
+       private ClassInfo[] _getAllParents() {
                if (allParents == null) {
-                       ClassInfo[] a1 = getParentsInternal(), a2 = 
getInterfacesInternal();
+                       ClassInfo[] a1 = _getParents(), a2 = _getInterfaces();
                        ClassInfo[] l = new ClassInfo[a1.length + a2.length];
                        for (int i = 0; i < a1.length; i++)
                                l[i] = a1[i];
@@ -386,7 +386,7 @@ public final class ClassInfo {
         *      <br>Results are ordered alphabetically.
         */
        public List<MethodInfo> getPublicMethods() {
-               return new ReadOnlyArrayList<>(getPublicMethodsInternal());
+               return new UnmodifiableArray<>(_getPublicMethods());
        }
 
        /**
@@ -398,7 +398,7 @@ public final class ClassInfo {
         *  The public method with the specified method name and argument 
types, or <jk>null</jk> if not found.
         */
        public MethodInfo getPublicMethod(String name, Class<?>...args) {
-               for (MethodInfo mi : getPublicMethodsInternal())
+               for (MethodInfo mi : _getPublicMethods())
                        if (mi.hasName(name) && mi.hasParamTypes(args))
                                return mi;
                return null;
@@ -413,7 +413,7 @@ public final class ClassInfo {
         *  The method with the specified method name and argument types, or 
<jk>null</jk> if not found.
         */
        public MethodInfo getMethod(String name, Class<?>...args) {
-               for (MethodInfo mi : getAllMethodsInternal())
+               for (MethodInfo mi : _getAllMethods())
                        if (mi.hasName(name) && mi.hasParamTypes(args))
                                return mi;
                return null;
@@ -427,7 +427,7 @@ public final class ClassInfo {
         *      <br>Results are ordered alphabetically.
         */
        public List<MethodInfo> getDeclaredMethods() {
-               return new ReadOnlyArrayList<>(getDeclaredMethodsInternal());
+               return new UnmodifiableArray<>(_getDeclaredMethods());
        }
 
        /**
@@ -438,7 +438,7 @@ public final class ClassInfo {
         *      <br>Results are ordered child-to-parent, and then 
alphabetically per class.
         */
        public List<MethodInfo> getAllMethods() {
-               return new ReadOnlyArrayList<>(getAllMethodsInternal());
+               return new UnmodifiableArray<>(_getAllMethods());
        }
 
        /**
@@ -450,61 +450,61 @@ public final class ClassInfo {
         *      <br>Results are ordered parent-to-child, and then 
alphabetically per class.
         */
        public List<MethodInfo> getAllMethodsParentFirst() {
-               return new 
ReadOnlyArrayList<>(getAllMethodsParentFirstInternal());
+               return new UnmodifiableArray<>(_getAllMethodsParentFirst());
        }
 
-       private MethodInfo[] getPublicMethodsInternal() {
+       private MethodInfo[] _getPublicMethods() {
                if (publicMethods == null) {
                        Method[] mm = c == null ? new Method[0] : 
c.getMethods();
                        List<MethodInfo> l = new ArrayList<>(mm.length);
                        for (Method m : mm)
                                if (m.getDeclaringClass() != Object.class)
-                                       l.add(MethodInfo.of(this, m, 
getProxyTarget(m)));
+                                       l.add(MethodInfo.of(this, m, 
_getProxyTarget(m)));
                        l.sort(null);
                        publicMethods = l.toArray(new MethodInfo[l.size()]);
                }
                return publicMethods;
        }
 
-       private MethodInfo[] getDeclaredMethodsInternal() {
+       private MethodInfo[] _getDeclaredMethods() {
                if (declaredMethods == null) {
                        Method[] mm = c == null ? new Method[0] : 
c.getDeclaredMethods();
                        List<MethodInfo> l = new ArrayList<>(mm.length);
                        for (Method m : mm)
                                if (! "$jacocoInit".equals(m.getName())) // 
Jacoco adds its own simulated methods.
-                                       l.add(MethodInfo.of(this, m, 
getProxyTarget(m)));
+                                       l.add(MethodInfo.of(this, m, 
_getProxyTarget(m)));
                        l.sort(null);
                        declaredMethods = l.toArray(new MethodInfo[l.size()]);
                }
                return declaredMethods;
        }
 
-       private MethodInfo[] getAllMethodsInternal() {
+       private MethodInfo[] _getAllMethods() {
                if (allMethods == null) {
                        List<MethodInfo> l = new ArrayList<>();
                        for (ClassInfo c : getAllParentsChildFirst())
-                               c.appendDeclaredMethods(l);
+                               c._appendDeclaredMethods(l);
                        allMethods = l.toArray(new MethodInfo[l.size()]);
                }
                return allMethods;
        }
 
-       private MethodInfo[] getAllMethodsParentFirstInternal() {
+       private MethodInfo[] _getAllMethodsParentFirst() {
                if (allMethodsParentFirst == null) {
                        List<MethodInfo> l = new ArrayList<>();
                        for (ClassInfo c : getAllParentsParentFirst())
-                               c.appendDeclaredMethods(l);
+                               c._appendDeclaredMethods(l);
                        allMethodsParentFirst = l.toArray(new 
MethodInfo[l.size()]);
                }
                return allMethodsParentFirst;
        }
 
-       private List<MethodInfo> appendDeclaredMethods(List<MethodInfo> l) {
+       private List<MethodInfo> _appendDeclaredMethods(List<MethodInfo> l) {
                l.addAll(getDeclaredMethods());
                return l;
        }
 
-       private Method getProxyTarget(Method m) {
+       private Method _getProxyTarget(Method m) {
                if (proxyFor != null) {
                        MethodInfo m2 = proxyFor.getMethod(m.getName(), 
m.getParameterTypes());
                        if (m2 != null)
@@ -513,7 +513,7 @@ public final class ClassInfo {
                return m;
        }
 
-       private Constructor<?> getProxyTarget(Constructor<?> c) {
+       private Constructor<?> _getProxyTarget(Constructor<?> c) {
                if (proxyFor != null) {
                        ConstructorInfo c2 = 
proxyFor.getConstructor(Visibility.PRIVATE, c.getParameterTypes());
                        if (c2 != null)
@@ -629,7 +629,7 @@ public final class ClassInfo {
         * @return All public constructors defined on this class.
         */
        public List<ConstructorInfo> getPublicConstructors() {
-               return new ReadOnlyArrayList<>(getPublicConstructorsInternal());
+               return new UnmodifiableArray<>(_getPublicConstructors());
        }
 
        /**
@@ -640,7 +640,7 @@ public final class ClassInfo {
         *  The public constructor with the specified argument types, or 
<jk>null</jk> if not found.
         */
        public ConstructorInfo getPublicConstructor(Class<?>...args) {
-               for (ConstructorInfo ci : getPublicConstructorsInternal())
+               for (ConstructorInfo ci : _getPublicConstructors())
                        if (ci.hasParamTypes(args))
                                return ci;
                return null;
@@ -654,7 +654,7 @@ public final class ClassInfo {
         *  The declared constructor with the specified argument types, or 
<jk>null</jk> if not found.
         */
        public ConstructorInfo getDeclaredConstructor(Class<?>...args) {
-               for (ConstructorInfo ci : getDeclaredConstructorsInternal())
+               for (ConstructorInfo ci : _getDeclaredConstructors())
                        if (ci.hasParamTypes(args))
                                return ci;
                return null;
@@ -671,7 +671,7 @@ public final class ClassInfo {
         *  The public constructor with the specified argument types, or 
<jk>null</jk> if not found.
         */
        public ConstructorInfo getAvailablePublicConstructor(Class<?>...args) {
-               return getConstructor(Visibility.PUBLIC, false, args);
+               return _getConstructor(Visibility.PUBLIC, false, args);
        }
 
        /**
@@ -680,7 +680,7 @@ public final class ClassInfo {
         * @return All constructors defined on this class.
         */
        public List<ConstructorInfo> getDeclaredConstructors() {
-               return new 
ReadOnlyArrayList<>(getDeclaredConstructorsInternal());
+               return new UnmodifiableArray<>(_getDeclaredConstructors());
        }
 
        /**
@@ -704,7 +704,7 @@ public final class ClassInfo {
         *      arguments.
         */
        public ConstructorInfo getPublicConstructorFuzzy(Object...args) {
-               return getConstructor(Visibility.PUBLIC, true, 
ClassUtils.getClasses(args));
+               return _getConstructor(Visibility.PUBLIC, true, 
ClassUtils.getClasses(args));
        }
 
        /**
@@ -717,38 +717,38 @@ public final class ClassInfo {
         * @return The matching constructor, or <jk>null</jk> if constructor 
could not be found.
         */
        public ConstructorInfo getConstructor(Visibility vis, 
Class<?>...argTypes) {
-               return getConstructor(vis, false, argTypes);
+               return _getConstructor(vis, false, argTypes);
        }
 
-       private ConstructorInfo[] getPublicConstructorsInternal() {
+       private ConstructorInfo[] _getPublicConstructors() {
                if (publicConstructors == null) {
                        Constructor<?>[] cc = c == null ? new Constructor[0] : 
c.getConstructors();
                        List<ConstructorInfo> l = new ArrayList<>(cc.length);
                        for (Constructor<?> ccc : cc)
-                               l.add(ConstructorInfo.of(this, ccc, 
getProxyTarget(ccc)));
+                               l.add(ConstructorInfo.of(this, ccc, 
_getProxyTarget(ccc)));
                        l.sort(null);
                        publicConstructors = l.toArray(new 
ConstructorInfo[l.size()]);
                }
                return publicConstructors;
        }
 
-       private ConstructorInfo[] getDeclaredConstructorsInternal() {
+       private ConstructorInfo[] _getDeclaredConstructors() {
                if (declaredConstructors == null) {
                        Constructor<?>[] cc = c == null ? new Constructor[0] : 
c.getDeclaredConstructors();
                        List<ConstructorInfo> l = new ArrayList<>(cc.length);
                        for (Constructor<?> ccc : cc)
-                               l.add(ConstructorInfo.of(this, ccc, 
getProxyTarget(ccc)));
+                               l.add(ConstructorInfo.of(this, ccc, 
_getProxyTarget(ccc)));
                        l.sort(null);
                        declaredConstructors = l.toArray(new 
ConstructorInfo[l.size()]);
                }
                return declaredConstructors;
        }
 
-       private ConstructorInfo getConstructor(Visibility vis, boolean 
fuzzyArgs, Class<?>...argTypes) {
+       private ConstructorInfo _getConstructor(Visibility vis, boolean 
fuzzyArgs, Class<?>...argTypes) {
                if (fuzzyArgs) {
                        int bestCount = -1;
                        ConstructorInfo bestMatch = null;
-                       for (ConstructorInfo n : 
getDeclaredConstructorsInternal()) {
+                       for (ConstructorInfo n : _getDeclaredConstructors()) {
                                if (vis.isVisible(n.inner())) {
                                        int m = 
ClassUtils.fuzzyArgsMatch(n.getParamTypes(), argTypes);
                                        if (m > bestCount) {
@@ -761,7 +761,7 @@ public final class ClassInfo {
                }
 
                boolean isMemberClass = isNonStaticMemberClass();
-               for (ConstructorInfo n : getDeclaredConstructorsInternal()) {
+               for (ConstructorInfo n : _getDeclaredConstructors()) {
                        List<ClassInfo> paramTypes = n.getParamTypes();
                        if (isMemberClass)
                                paramTypes = paramTypes.subList(1, 
paramTypes.size());
@@ -791,7 +791,7 @@ public final class ClassInfo {
                if (isAbstract())
                        return null;
                boolean isMemberClass = isNonStaticMemberClass();
-               for (ConstructorInfo cc : getDeclaredConstructorsInternal())
+               for (ConstructorInfo cc : _getDeclaredConstructors())
                        if (cc.hasNumParams(isMemberClass ? 1 : 0) && 
cc.isVisible(v))
                                return cc.makeAccessible(v);
                return null;
@@ -812,7 +812,7 @@ public final class ClassInfo {
         *      <br>Results are in alphabetical order.
         */
        public List<FieldInfo> getPublicFields() {
-               return new ReadOnlyArrayList<>(getPublicFieldsInternal());
+               return new UnmodifiableArray<>(_getPublicFields());
        }
 
        /**
@@ -823,7 +823,7 @@ public final class ClassInfo {
         *      <br>Results are in alphabetical order.
         */
        public List<FieldInfo> getDeclaredFields() {
-               return new ReadOnlyArrayList<>(getDeclaredFieldsInternal());
+               return new UnmodifiableArray<>(_getDeclaredFields());
        }
 
        /**
@@ -834,7 +834,7 @@ public final class ClassInfo {
         *      <br>Results are ordered child-to-parent, and then alphabetical 
per class.
         */
        public List<FieldInfo> getAllFields() {
-               return new ReadOnlyArrayList<>(getAllFieldsInternal());
+               return new UnmodifiableArray<>(_getAllFields());
        }
 
        /**
@@ -845,7 +845,7 @@ public final class ClassInfo {
         *      <br>Results are ordered parent-to-child, and then alphabetical 
per class.
         */
        public List<FieldInfo> getAllFieldsParentFirst() {
-               return new 
ReadOnlyArrayList<>(getAllFieldsParentFirstInternal());
+               return new UnmodifiableArray<>(_getAllFieldsParentFirst());
        }
 
        /**
@@ -855,7 +855,7 @@ public final class ClassInfo {
         * @return The public field, or <jk>null</jk> if not found.
         */
        public FieldInfo getPublicField(String name) {
-               for (FieldInfo f : getPublicFieldsInternal())
+               for (FieldInfo f : _getPublicFields())
                        if (f.getName().equals(name))
                                return f;
                return null;
@@ -868,7 +868,7 @@ public final class ClassInfo {
         * @return The declared field, or <jk>null</jk> if not found.
         */
        public FieldInfo getDeclaredField(String name) {
-               for (FieldInfo f : getDeclaredFieldsInternal())
+               for (FieldInfo f : _getDeclaredFields())
                        if (f.getName().equals(name))
                                return f;
                return null;
@@ -881,7 +881,7 @@ public final class ClassInfo {
         * @return The public field, or <jk>null</jk> if not found.
         */
        public FieldInfo getStaticPublicField(String name) {
-               for (FieldInfo f : getPublicFieldsInternal())
+               for (FieldInfo f : _getPublicFields())
                        if (f.isStatic() && f.getName().equals(name))
                                return f;
                return null;
@@ -894,20 +894,20 @@ public final class ClassInfo {
         * @return The public field, or <jk>null</jk> if not found.
         */
        public Field getStaticPublicFieldInner(String name) {
-               for (FieldInfo f : getPublicFieldsInternal())
+               for (FieldInfo f : _getPublicFields())
                        if (f.isStatic() && f.getName().equals(name))
                                return f.inner();
                return null;
        }
 
-       private List<FieldInfo> appendDeclaredFields(List<FieldInfo> l) {
-               for (FieldInfo f : getDeclaredFieldsInternal())
+       private List<FieldInfo> _appendDeclaredFields(List<FieldInfo> l) {
+               for (FieldInfo f : _getDeclaredFields())
                        l.add(f);
                return l;
        }
 
-       private Map<String,FieldInfo> 
appendDeclaredPublicFields(Map<String,FieldInfo> m) {
-               for (FieldInfo f : getDeclaredFieldsInternal()) {
+       private Map<String,FieldInfo> 
_appendDeclaredPublicFields(Map<String,FieldInfo> m) {
+               for (FieldInfo f : _getDeclaredFields()) {
                        String fn = f.getName();
                        if (f.isPublic() && ! (m.containsKey(fn) || 
"$jacocoData".equals(fn)))
                                        m.put(f.getName(), f);
@@ -915,11 +915,11 @@ public final class ClassInfo {
                return m;
        }
 
-       private FieldInfo[] getPublicFieldsInternal() {
+       private FieldInfo[] _getPublicFields() {
                if (publicFields == null) {
                        Map<String,FieldInfo> m = new LinkedHashMap<>();
-                       for (ClassInfo c : getParentsInternal())
-                               c.appendDeclaredPublicFields(m);
+                       for (ClassInfo c : _getParents())
+                               c._appendDeclaredPublicFields(m);
                        List<FieldInfo> l = new ArrayList<>(m.values());
                        l.sort(null);
                        publicFields = l.toArray(new FieldInfo[l.size()]);
@@ -927,7 +927,7 @@ public final class ClassInfo {
                return publicFields;
        }
 
-       private FieldInfo[] getDeclaredFieldsInternal() {
+       private FieldInfo[] _getDeclaredFields() {
                if (declaredFields == null) {
                        Field[] ff = c == null ? new Field[0] : 
c.getDeclaredFields();
                        List<FieldInfo> l = new ArrayList<>(ff.length);
@@ -940,21 +940,21 @@ public final class ClassInfo {
                return declaredFields;
        }
 
-       private FieldInfo[] getAllFieldsInternal() {
+       private FieldInfo[] _getAllFields() {
                if (allFields == null) {
                        List<FieldInfo> l = new ArrayList<>();
-                       for (ClassInfo c : getAllParentsInternal())
-                               c.appendDeclaredFields(l);
+                       for (ClassInfo c : _getAllParents())
+                               c._appendDeclaredFields(l);
                        allFields = l.toArray(new FieldInfo[l.size()]);
                }
                return allFields;
        }
        
-       private FieldInfo[] getAllFieldsParentFirstInternal() {
+       private FieldInfo[] _getAllFieldsParentFirst() {
                if (allFieldsParentFirst == null) {
                        List<FieldInfo> l = new ArrayList<>();
                        for (ClassInfo c : getAllParentsParentFirst())
-                               c.appendDeclaredFields(l);
+                               c._appendDeclaredFields(l);
                        allFieldsParentFirst = l.toArray(new 
FieldInfo[l.size()]);
                }
                return allFieldsParentFirst;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
index 1a81b60..c8200fc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
@@ -164,7 +164,7 @@ public final class ConstructorInfo extends ExecutableInfo 
implements Comparable<
                        i = getParamCount() - o.getParamCount();
                        if (i == 0) {
                                for (int j = 0; j < getParamCount() && i == 0; 
j++) {
-                                       Class<?>[] tpt = rawParamTypes(), opt = 
o.rawParamTypes();
+                                       Class<?>[] tpt = _getRawParamTypes(), 
opt = o._getRawParamTypes();
                                        i = 
tpt[j].getName().compareTo(opt[j].getName());
                                }
                        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ExecutableInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ExecutableInfo.java
index 2f9bdf0..026d63c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ExecutableInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ExecutableInfo.java
@@ -132,7 +132,7 @@ public abstract class ExecutableInfo {
         * @return An array of parameter information, never <jk>null</jk>.
         */
        public final List<ParamInfo> getParams() {
-               return new ReadOnlyArrayList<>(getParamsInternal());
+               return new UnmodifiableArray<>(_getParams());
        }
 
        /**
@@ -143,7 +143,7 @@ public abstract class ExecutableInfo {
         */
        public final ParamInfo getParam(int index) {
                checkIndex(index);
-               return getParamsInternal()[index];
+               return _getParams()[index];
        }
 
        /**
@@ -152,7 +152,7 @@ public abstract class ExecutableInfo {
         * @return The parameter types on this executable.
         */
        public final List<ClassInfo> getParamTypes() {
-               return new ReadOnlyArrayList<>(getParamTypesInternal());
+               return new UnmodifiableArray<>(_getParamTypes());
        }
 
        /**
@@ -163,7 +163,7 @@ public abstract class ExecutableInfo {
         */
        public final ClassInfo getParamType(int index) {
                checkIndex(index);
-               return getParamTypesInternal()[index];
+               return _getParamTypes()[index];
        }
 
        /**
@@ -171,8 +171,8 @@ public abstract class ExecutableInfo {
         *
         * @return The raw parameter types on this executable.
         */
-       public final Class<?>[] getRawParamTypes() {
-               return rawParamTypes().clone();
+       public final List<Class<?>> getRawParamTypes() {
+               return new UnmodifiableArray<>(_getRawParamTypes());
        }
 
        /**
@@ -183,7 +183,7 @@ public abstract class ExecutableInfo {
         */
        public final Class<?> getRawParamType(int index) {
                checkIndex(index);
-               return rawParamTypes()[index];
+               return _getRawParamTypes()[index];
        }
 
        /**
@@ -191,8 +191,8 @@ public abstract class ExecutableInfo {
         *
         * @return The raw generic parameter types on this executable.
         */
-       public final Type[] getRawGenericParamTypes() {
-               return rawGenericParamTypes().clone();
+       public final List<Type> getRawGenericParamTypes() {
+               return new UnmodifiableArray<>(_getRawGenericParamTypes());
        }
 
        /**
@@ -203,7 +203,7 @@ public abstract class ExecutableInfo {
         */
        public final Type getRawGenericParamType(int index) {
                checkIndex(index);
-               return rawGenericParamTypes()[index];
+               return _getRawGenericParamTypes()[index];
        }
 
        /**
@@ -212,8 +212,8 @@ public abstract class ExecutableInfo {
         * @return An array of raw {@link Parameter} objects, or an empty array 
if executable has no parameters.
         * @see Executable#getParameters()
         */
-       public final Parameter[] getRawParameters() {
-               return rawParameters().clone();
+       public final List<Parameter> getRawParameters() {
+               return new UnmodifiableArray<>(_getRawParameters());
        }
 
        /**
@@ -225,12 +225,12 @@ public abstract class ExecutableInfo {
         */
        public final Parameter getRawParameter(int index) {
                checkIndex(index);
-               return rawParameters()[index];
+               return _getRawParameters()[index];
        }
 
-       private ParamInfo[] getParamsInternal() {
+       private ParamInfo[] _getParams() {
                if (params == null) {
-                       Parameter[] rp = rawParameters();
+                       Parameter[] rp = _getRawParameters();
                        ParamInfo[] l = new ParamInfo[rp.length];
                        for (int i = 0; i < rp.length; i++)
                                l[i] = new ParamInfo(this, rp[i], i);
@@ -239,12 +239,12 @@ public abstract class ExecutableInfo {
                return params;
        }
 
-       private ClassInfo[] getParamTypesInternal() {
+       private ClassInfo[] _getParamTypes() {
                if (paramTypes == null) {
-                       Class<?>[] ptc = rawParamTypes();
+                       Class<?>[] ptc = _getRawParamTypes();
                        // Note that due to a bug involving Enum constructors, 
getGenericParameterTypes() may
                        // always return an empty array.  This appears to be 
fixed in Java 8 b75.
-                       Type[] ptt = rawGenericParamTypes();
+                       Type[] ptt = _getRawGenericParamTypes();
                        if (ptt.length != ptc.length)
                                ptt = ptc;
                        ClassInfo[] l = new ClassInfo[ptc.length];
@@ -255,19 +255,19 @@ public abstract class ExecutableInfo {
                return paramTypes;
        }
 
-       Class<?>[] rawParamTypes() {
+       Class<?>[] _getRawParamTypes() {
                if (rawParamTypes == null)
                        rawParamTypes = e.getParameterTypes();
                return rawParamTypes;
        }
 
-       Type[] rawGenericParamTypes() {
+       private Type[] _getRawGenericParamTypes() {
                if (rawGenericParamTypes == null)
                        rawGenericParamTypes = re.getGenericParameterTypes();
                return rawGenericParamTypes;
        }
 
-       Parameter[] rawParameters() {
+       private Parameter[] _getRawParameters() {
                if (rawParameters == null)
                        rawParameters = re.getParameters();
                return rawParameters;
@@ -315,7 +315,7 @@ public abstract class ExecutableInfo {
         * @return The exception types on this executable.
         */
        public final List<ClassInfo> getExceptionTypes() {
-               return new ReadOnlyArrayList<>(getExceptionTypesInternal());
+               return new UnmodifiableArray<>(_getExceptionTypes());
        }
 
        /**
@@ -324,12 +324,12 @@ public abstract class ExecutableInfo {
         * @return The raw exception types on this executable.
         */
        public final Class<?>[] getRawExceptionTypes() {
-               return rawExceptionTypes().clone();
+               return _getRawExceptionTypes().clone();
        }
 
-       private ClassInfo[] getExceptionTypesInternal() {
+       private ClassInfo[] _getExceptionTypes() {
                if (exceptionInfos == null) {
-                       Class<?>[] exceptionTypes = rawExceptionTypes();
+                       Class<?>[] exceptionTypes = _getRawExceptionTypes();
                        ClassInfo[] l = new ClassInfo[exceptionTypes.length];
                        for (int i = 0; i < exceptionTypes.length; i++)
                                l[i] = ClassInfo.of(exceptionTypes[i]);
@@ -338,7 +338,7 @@ public abstract class ExecutableInfo {
                return exceptionInfos;
        }
 
-       private Class<?>[] rawExceptionTypes() {
+       private Class<?>[] _getRawExceptionTypes() {
                if (rawExceptionTypes == null)
                        rawExceptionTypes = e.getExceptionTypes();
                return rawExceptionTypes;
@@ -467,7 +467,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has this arguments in the exact 
order.
         */
        public final boolean hasParamTypes(Class<?>...args) {
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                if (pt.length == args.length) {
                        for (int i = 0; i < pt.length; i++)
                                if (! pt[i].equals(args[i]))
@@ -484,7 +484,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has this arguments in the exact 
order.
         */
        public final boolean hasParamTypes(ClassInfo...args) {
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                if (pt.length == args.length) {
                        for (int i = 0; i < pt.length; i++)
                                if (! pt[i].equals(args[i].inner()))
@@ -501,7 +501,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has this arguments in the exact 
order.
         */
        public final boolean hasParamTypeParents(Class<?>...args) {
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                if (pt.length == args.length) {
                        for (int i = 0; i < pt.length; i++)
                                if (! args[i].isAssignableFrom(pt[i]))
@@ -518,7 +518,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has this arguments in the exact 
order.
         */
        public final boolean hasParamTypeParents(ClassInfo...args) {
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                if (pt.length == args.length) {
                        for (int i = 0; i < pt.length; i++)
                                if (! args[i].inner().isAssignableFrom(pt[i]))
@@ -535,7 +535,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has at most only this arguments 
in any order.
         */
        public final boolean hasFuzzyParamTypes(Class<?>...args) {
-               return ClassUtils.fuzzyArgsMatch(rawParamTypes(), args) != -1;
+               return ClassUtils.fuzzyArgsMatch(_getRawParamTypes(), args) != 
-1;
        }
 
        /**
@@ -545,7 +545,7 @@ public abstract class ExecutableInfo {
         * @return <jk>true</jk> if this method has at most only this arguments 
in any order.
         */
        public boolean hasFuzzyParamTypes(ClassInfo...args) {
-               return ClassUtils.fuzzyArgsMatch(rawParamTypes(), args) != -1;
+               return ClassUtils.fuzzyArgsMatch(_getRawParamTypes(), args) != 
-1;
        }
 
        /**
@@ -737,7 +737,7 @@ public abstract class ExecutableInfo {
        public final String getShortName() {
                StringBuilder sb = new StringBuilder(64);
                sb.append(getSimpleName()).append('(');
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                for (int i = 0; i < pt.length; i++) {
                        if (i > 0)
                                sb.append(',');
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
index 0672f2e..f9d0b39 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.reflect;
 
-import static org.apache.juneau.internal.CollectionUtils.*;
-
 import java.beans.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -32,7 +30,7 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
 
        private ClassInfo returnType;
        private final Method m;
-       private List<Method> matching;
+       private Method[] matching;
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Instantiation.
@@ -111,9 +109,7 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
         *      <br>Methods are ordered from child-to-parent order.
         */
        public List<Method> getMatching() {
-               if (matching == null)
-                       matching = 
Collections.unmodifiableList(findMatching(new ArrayList<>(), m, 
m.getDeclaringClass()));
-               return matching;
+               return new UnmodifiableArray<>(_getMatching());
        }
 
        /**
@@ -123,8 +119,8 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
         *      All matching methods including this method itself.
         *      <br>Methods are ordered from parent-to-child order.
         */
-       public Iterable<Method> getMatchingParentFirst() {
-               return iterable(getMatching(), true);
+       public List<Method> getMatchingParentFirst() {
+               return new UnmodifiableArray<>(_getMatching(), true);
        }
 
        private static List<Method> findMatching(List<Method> l, Method m, 
Class<?> c) {
@@ -146,6 +142,14 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
                return null;
        }
 
+       private Method[] _getMatching() {
+               if (matching == null) {
+                       List<Method> l = findMatching(new ArrayList<>(), m, 
m.getDeclaringClass());
+                       matching = l.toArray(new Method[l.size()]);
+               }
+               return matching;
+       }
+
        
//-----------------------------------------------------------------------------------------------------------------
        // Annotations
        
//-----------------------------------------------------------------------------------------------------------------
@@ -495,7 +499,7 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
        public String getSignature() {
                StringBuilder sb = new StringBuilder(128);
                sb.append(m.getName());
-               Class<?>[] pt = rawParamTypes();
+               Class<?>[] pt = _getRawParamTypes();
                if (pt.length > 0) {
                        sb.append('(');
                        List<ParamInfo> mpi = getParams();
@@ -541,7 +545,7 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
         * @return <jk>true</jk> if the method parameters only consist of the 
types specified in the list.
         */
        public boolean argsOnlyOfType(Class<?>...args) {
-               for (Class<?> c1 : rawParamTypes()) {
+               for (Class<?> c1 : _getRawParamTypes()) {
                        boolean foundMatch = false;
                        for (Class<?> c2 : args)
                                if (c1 == c2)
@@ -565,10 +569,10 @@ public final class MethodInfo extends ExecutableInfo 
implements Comparable<Metho
        public int compareTo(MethodInfo o) {
                int i = getSimpleName().compareTo(o.getSimpleName());
                if (i == 0) {
-                       i = rawParamTypes().length - o.rawParamTypes().length;
+                       i = _getRawParamTypes().length - 
o._getRawParamTypes().length;
                        if (i == 0) {
-                               for (int j = 0; j < rawParamTypes().length && i 
== 0; j++) {
-                                       i = 
rawParamTypes()[j].getName().compareTo(o.rawParamTypes()[j].getName());
+                               for (int j = 0; j < _getRawParamTypes().length 
&& i == 0; j++) {
+                                       i = 
_getRawParamTypes()[j].getName().compareTo(o._getRawParamTypes()[j].getName());
                                }
                        }
                }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 26efcac..0872903 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -3875,7 +3875,7 @@ public final class RestContext extends BeanContext {
                                                        if (! 
_startCallMethods.containsKey(sig)) {
                                                                
m.setAccessible();
                                                                
_startCallMethods.put(sig, m.inner());
-                                                               
_startCallMethodParams.add(m.getRawParamTypes());
+                                                               
_startCallMethodParams.add((Class<?>[])m.getRawParamTypes().toArray());
                                                                
assertArgsOnlyOfType(m, HttpServletRequest.class, HttpServletResponse.class);
                                                        }
                                                        break;
@@ -3884,7 +3884,7 @@ public final class RestContext extends BeanContext {
                                                        if (! 
_endCallMethods.containsKey(sig)) {
                                                                
m.setAccessible();
                                                                
_endCallMethods.put(sig, m.inner());
-                                                               
_endCallMethodParams.add(m.getRawParamTypes());
+                                                               
_endCallMethodParams.add((Class<?>[])m.getRawParamTypes().toArray());
                                                                
assertArgsOnlyOfType(m, HttpServletRequest.class, HttpServletResponse.class);
                                                        }
                                                        break;
@@ -3893,7 +3893,7 @@ public final class RestContext extends BeanContext {
                                                        if (! 
_postInitMethods.containsKey(sig)) {
                                                                
m.setAccessible();
                                                                
_postInitMethods.put(sig, m.inner());
-                                                               
_postInitMethodParams.add(m.getRawParamTypes());
+                                                               
_postInitMethodParams.add((Class<?>[])m.getRawParamTypes().toArray());
                                                                
assertArgsOnlyOfType(m, RestContext.class);
                                                        }
                                                        break;
@@ -3902,7 +3902,7 @@ public final class RestContext extends BeanContext {
                                                        if (! 
_postInitChildFirstMethods.containsKey(sig)) {
                                                                
m.setAccessible();
                                                                
_postInitChildFirstMethods.put(sig, m.inner());
-                                                               
_postInitChildFirstMethodParams.add(m.getRawParamTypes());
+                                                               
_postInitChildFirstMethodParams.add((Class<?>[])m.getRawParamTypes().toArray());
                                                                
assertArgsOnlyOfType(m, RestContext.class);
                                                        }
                                                        break;
@@ -3911,7 +3911,7 @@ public final class RestContext extends BeanContext {
                                                        if (! 
_destroyMethods.containsKey(sig)) {
                                                                
m.setAccessible();
                                                                
_destroyMethods.put(sig, m.inner());
-                                                               
_destroyMethodParams.add(m.getRawParamTypes());
+                                                               
_destroyMethodParams.add((Class<?>[])m.getRawParamTypes().toArray());
                                                                
assertArgsOnlyOfType(m, RestContext.class);
                                                        }
                                                        break;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index e1f15a8..95c562c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -225,7 +225,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
                }
                for (MethodInfo m : map.values()) {
                        assertArgsOnlyOfType(m, RestContextBuilder.class, 
ServletConfig.class);
-                       Class<?>[] pt = m.getRawParamTypes();
+                       Class<?>[] pt = 
(Class<?>[])m.getRawParamTypes().toArray();
                        Object[] args = new Object[pt.length];
                        for (int i = 0; i < args.length; i++) {
                                if (pt[i] == RestContextBuilder.class)
@@ -1963,7 +1963,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         * @return This object (for method chaining).
         */
        public RestContextBuilder staticFiles(String mappingString) throws 
ParseException{
-               for (StaticFileMapping sfm : 
reverseIterable(StaticFileMapping.parse(resourceClass, mappingString)))
+               for (StaticFileMapping sfm : 
riterable(StaticFileMapping.parse(resourceClass, mappingString)))
                        staticFiles(sfm);
                return this;
        }
@@ -1993,7 +1993,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         * @throws ParseException If mapping string is malformed.
         */
        public RestContextBuilder staticFiles(Class<?> baseClass, String 
mappingString) throws ParseException {
-               for (StaticFileMapping sfm : 
reverseIterable(StaticFileMapping.parse(baseClass, mappingString)))
+               for (StaticFileMapping sfm : 
riterable(StaticFileMapping.parse(baseClass, mappingString)))
                        staticFiles(sfm);
                return this;
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
index e5c3e12..15e72f1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
@@ -174,7 +174,7 @@ public class RestConfigApply extends ConfigApply<Rest> {
 
                for (String mapping : a.staticFiles()) {
                        try {
-                               for (StaticFileMapping sfm : 
reverseIterable(StaticFileMapping.parse(c.inner(), string(mapping))))
+                               for (StaticFileMapping sfm : 
riterable(StaticFileMapping.parse(c.inner(), string(mapping))))
                                        psb.addTo(REST_staticFiles, sfm);
                        } catch (ParseException e) {
                                throw new ConfigException(e, "Invalid 
@Resource(staticFiles) value on class ''{0}''", c);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
index 4bd2969..d4a1f15 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResourceConfigApply.java
@@ -165,7 +165,7 @@ public class RestResourceConfigApply extends 
ConfigApply<RestResource> {
 
                for (String mapping : a.staticFiles()) {
                        try {
-                               for (StaticFileMapping sfm : 
reverseIterable(StaticFileMapping.parse(c.inner(), string(mapping))))
+                               for (StaticFileMapping sfm : 
riterable(StaticFileMapping.parse(c.inner(), string(mapping))))
                                        psb.addTo(REST_staticFiles, sfm);
                        } catch (ParseException e) {
                                throw new ConfigException(e, "Invalid 
@Resource(staticFiles) value on class ''{0}''", c);

Reply via email to