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 d59a55924 Code optimization.
d59a55924 is described below

commit d59a559246001efb2300d9cb42e0651f733de7c1
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jun 4 05:16:33 2022 -0400

    Code optimization.
---
 .../src/main/java/org/apache/juneau/BeanMeta.java  | 43 +++++++++++-----------
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 9f3af682a..591c59ba1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -654,8 +654,7 @@ public class BeanMeta<T> {
        static final List<BeanMethod> findBeanMethods(BeanContext ctx, Class<?> 
c, Class<?> stopClass, Visibility v, PropertyNamer pn, boolean fluentSetters) {
                List<BeanMethod> l = new LinkedList<>();
 
-               String TODO = "Make more efficient";
-               for (ClassInfo c2 : findClasses(c, stopClass)) {
+               forEachClass(ClassInfo.of(c), stopClass, c2 -> {
                        for (MethodInfo m : c2.getDeclaredMethods()) {
                                if (m.isStatic() || m.isBridge() || 
m.getParamCount() > 2 || m.hasAnnotation(ctx, BeanIgnore.class))
                                        continue;
@@ -752,14 +751,14 @@ public class BeanMeta<T> {
                                                l.add(new BeanMethod(n, 
methodType, m.inner()));
                                }
                        }
-               }
+               });
                return l;
        }
 
        static final Collection<Field> findBeanFields(BeanContext ctx, Class<?> 
c, Class<?> stopClass, Visibility v) {
                List<Field> l = new LinkedList<>();
                boolean noIgnoreTransients = ! ctx.isIgnoreTransientFields();
-               for (ClassInfo c2 : findClasses(c, stopClass)) {
+               forEachClass(ClassInfo.of(c), stopClass, c2 -> {
                        c2.forEachDeclaredField(
                                x -> x.isNotStatic()
                                && (x.isNotTransient() || noIgnoreTransients)
@@ -768,13 +767,14 @@ public class BeanMeta<T> {
                                && (v.isVisible(x.inner()) || 
x.hasAnnotation(ctx, Beanp.class)),
                                x -> l.add(x.inner())
                        );
-               }
+               });
                return l;
        }
 
        static final Field findInnerBeanField(BeanContext ctx, Class<?> c, 
Class<?> stopClass, String name) {
                boolean noIgnoreTransients = ! ctx.isIgnoreTransientFields();
-               for (ClassInfo c2 : findClasses(c, stopClass)) {
+               Value<Field> value = Value.empty();
+               forEachClass(ClassInfo.of(c), stopClass, c2 -> {
                        FieldInfo f = c2.getDeclaredField(
                                x -> x.isNotStatic()
                                && (x.isNotTransient() || noIgnoreTransients)
@@ -783,24 +783,23 @@ public class BeanMeta<T> {
                                && x.hasName(name)
                        );
                        if (f != null)
-                               return f.inner();
-               }
-               return null;
-       }
-
-       private static List<ClassInfo> findClasses(Class<?> c, Class<?> 
stopClass) {
-               LinkedList<ClassInfo> l = new LinkedList<>();
-               findClasses(c, l, stopClass);
-               return l;
+                               value.set(f.inner());
+               });
+               return value.get();
        }
 
-       private static void findClasses(Class<?> c, LinkedList<ClassInfo> l, 
Class<?> stopClass) {
-               while (c != null && stopClass != c) {
-                       l.addFirst(ClassInfo.of(c));
-                       for (Class<?> ci : c.getInterfaces())
-                               findClasses(ci, l, stopClass);
-                       c = c.getSuperclass();
-               }
+//     private static List<ClassInfo> findClasses(Class<?> c, Class<?> 
stopClass) {
+//             LinkedList<ClassInfo> l = new LinkedList<>();
+//             forEachClass(ClassInfo.of(c), stopClass, x -> l.add(x));
+//             return l;
+//     }
+
+       private static void forEachClass(ClassInfo c, Class<?> stopClass, 
Consumer<ClassInfo> consumer) {
+               ClassInfo sc = c.getSuperclass();
+               if (sc != null && ! sc.is(stopClass))
+                       forEachClass(sc, stopClass, consumer);
+               c.getInterfaces().forEach(x -> forEachClass(x, stopClass, 
consumer));
+               consumer.accept(c);
        }
 
        /**

Reply via email to