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 015c462  JUNEAU-197
015c462 is described below

commit 015c462d881de1f816c4db84f51a8f32eeca0307
Author: JamesBognar <[email protected]>
AuthorDate: Sun Mar 8 13:51:04 2020 -0400

    JUNEAU-197
    
    @BeanConfig(bpi) does not override @Bean(bpi)
---
 .../apache/juneau/internal/ReadOnlyArrayList.java  |  7 +-
 .../org/apache/juneau/reflect/ExecutableInfo.java  | 82 ++++++++++++----------
 2 files changed, 51 insertions(+), 38 deletions(-)

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/ReadOnlyArrayList.java
index 28c165a..eda8e16 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/ReadOnlyArrayList.java
@@ -212,6 +212,11 @@ public class ReadOnlyArrayList<T> implements List<T> {
 
        @Override
        public List<T> subList(int fromIndex, int toIndex) {
-               throw new UnsupportedOperationException("Unsupported method on 
ReadOnlyArrayList class.");
+               if (reversed) {
+                       List<T> l = Arrays.asList(array);
+                       Collections.reverse(l);
+                       return l.subList(fromIndex, toIndex);
+               }
+               return Arrays.asList(array).subList(fromIndex, toIndex);
        }
 }
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 5f28111..2f9bdf0 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
@@ -30,8 +30,8 @@ public abstract class ExecutableInfo {
        final Executable e, re;
        final boolean isConstructor;
 
-       private List<ParamInfo> params;
-       private List<ClassInfo> paramTypes, exceptionInfos;
+       private ParamInfo[] params;
+       private ClassInfo[] paramTypes, exceptionInfos;
        private Class<?>[] rawParamTypes, rawExceptionTypes;
        private Type[] rawGenericParamTypes;
        private Parameter[] rawParameters;
@@ -132,14 +132,7 @@ public abstract class ExecutableInfo {
         * @return An array of parameter information, never <jk>null</jk>.
         */
        public final List<ParamInfo> getParams() {
-               if (params == null) {
-                       Parameter[] rp = rawParameters();
-                       List<ParamInfo> l = new ArrayList<>(rp.length);
-                       for (int i = 0; i < rp.length; i++)
-                               l.add(new ParamInfo(this, rp[i], i));
-                       params = Collections.unmodifiableList(l);
-               }
-               return params;
+               return new ReadOnlyArrayList<>(getParamsInternal());
        }
 
        /**
@@ -150,9 +143,7 @@ public abstract class ExecutableInfo {
         */
        public final ParamInfo getParam(int index) {
                checkIndex(index);
-               if (params != null)
-                       return params.get(index);
-               return new ParamInfo(this, rawParameters()[index], index);
+               return getParamsInternal()[index];
        }
 
        /**
@@ -161,19 +152,7 @@ public abstract class ExecutableInfo {
         * @return The parameter types on this executable.
         */
        public final List<ClassInfo> getParamTypes() {
-               if (paramTypes == null) {
-                       Class<?>[] ptc = rawParamTypes();
-                       // 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();
-                       if (ptt.length != ptc.length)
-                               ptt = ptc;
-                       List<ClassInfo> l = new ArrayList<>(ptc.length);
-                       for (int i = 0; i < ptc.length; i++)
-                               l.add(ClassInfo.of(ptc[i], ptt[i]));
-                       paramTypes = Collections.unmodifiableList(l);
-               }
-               return paramTypes;
+               return new ReadOnlyArrayList<>(getParamTypesInternal());
        }
 
        /**
@@ -184,9 +163,7 @@ public abstract class ExecutableInfo {
         */
        public final ClassInfo getParamType(int index) {
                checkIndex(index);
-               if (paramTypes != null)
-                       return getParamTypes().get(index);
-               return ClassInfo.of(getRawParamType(index), 
getRawGenericParamType(index));
+               return getParamTypesInternal()[index];
        }
 
        /**
@@ -251,6 +228,33 @@ public abstract class ExecutableInfo {
                return rawParameters()[index];
        }
 
+       private ParamInfo[] getParamsInternal() {
+               if (params == null) {
+                       Parameter[] rp = rawParameters();
+                       ParamInfo[] l = new ParamInfo[rp.length];
+                       for (int i = 0; i < rp.length; i++)
+                               l[i] = new ParamInfo(this, rp[i], i);
+                       params = l;
+               }
+               return params;
+       }
+
+       private ClassInfo[] getParamTypesInternal() {
+               if (paramTypes == null) {
+                       Class<?>[] ptc = rawParamTypes();
+                       // 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();
+                       if (ptt.length != ptc.length)
+                               ptt = ptc;
+                       ClassInfo[] l = new ClassInfo[ptc.length];
+                       for (int i = 0; i < ptc.length; i++)
+                               l[i] = ClassInfo.of(ptc[i], ptt[i]);
+                       paramTypes = l;
+               }
+               return paramTypes;
+       }
+
        Class<?>[] rawParamTypes() {
                if (rawParamTypes == null)
                        rawParamTypes = e.getParameterTypes();
@@ -311,14 +315,7 @@ public abstract class ExecutableInfo {
         * @return The exception types on this executable.
         */
        public final List<ClassInfo> getExceptionTypes() {
-               if (exceptionInfos == null) {
-                       Class<?>[] exceptionTypes = rawExceptionTypes();
-                       List<ClassInfo> l = new 
ArrayList<>(exceptionTypes.length);
-                       for (Class<?> et : exceptionTypes)
-                               l.add(ClassInfo.of(et));
-                       exceptionInfos = Collections.unmodifiableList(l);
-               }
-               return exceptionInfos;
+               return new ReadOnlyArrayList<>(getExceptionTypesInternal());
        }
 
        /**
@@ -330,6 +327,17 @@ public abstract class ExecutableInfo {
                return rawExceptionTypes().clone();
        }
 
+       private ClassInfo[] getExceptionTypesInternal() {
+               if (exceptionInfos == null) {
+                       Class<?>[] exceptionTypes = rawExceptionTypes();
+                       ClassInfo[] l = new ClassInfo[exceptionTypes.length];
+                       for (int i = 0; i < exceptionTypes.length; i++)
+                               l[i] = ClassInfo.of(exceptionTypes[i]);
+                       exceptionInfos = l;
+               }
+               return exceptionInfos;
+       }
+
        private Class<?>[] rawExceptionTypes() {
                if (rawExceptionTypes == null)
                        rawExceptionTypes = e.getExceptionTypes();

Reply via email to