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

commit 0cf3dbc9d85e145041c1407cf7c6e0aa12cd07b6
Author: Gary D. Gregory <garydgreg...@gmail.com>
AuthorDate: Thu Jun 12 10:31:54 2025 -0400

    Reimplement org.apache.commons.lang3.ClassUtils.hierarchy(Class,
    Interfaces) using an AtomicReference
---
 src/changes/changes.xml                                |  1 +
 src/main/java/org/apache/commons/lang3/ClassUtils.java | 11 ++++-------
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e4918f047..741e35603 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -91,6 +91,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                   type="fix" dev="ggregory" due-to="Sridhar 
Balijepalli, Piotr P. Karwasz">Fix Javadoc typo and improve clarity in 
defaultIfBlank method #1376.</action>
     <action issue="LANG-1773" type="fix" dev="ggregory" due-to="Éamonn 
McManus, Gary Gregory">Apache Commons Lang no longer builds on Android 
#1381.</action>
     <action issue="LANG-1772" type="fix" dev="ggregory" due-to="James Winters, 
Piotr P. Karwasz, Gary Gregory">Restrict size of cache to prevent overflow 
errors #1379.</action>
+    <action issue="LANG-1772" type="fix" dev="ggregory" due-to="Gary 
Gregory">Reimplement org.apache.commons.lang3.ClassUtils.hierarchy(Class, 
Interfaces) using an AtomicReference.</action>
     <!-- ADD -->
     <action                   type="add" dev="ggregory" due-to="Gary 
Gregory">Add Strings and refactor StringUtils.</action>
     <action issue="LANG-1747" type="add" dev="ggregory" due-to="Oliver B. 
Fischer, Gary Gregory">Add StopWatch.run([Failable]Runnable) and 
get([Failable]Supplier).</action>
diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java 
b/src/main/java/org/apache/commons/lang3/ClassUtils.java
index 43090b2db..8e7ab538b 100644
--- a/src/main/java/org/apache/commons/lang3/ClassUtils.java
+++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java
@@ -30,10 +30,9 @@
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
-import org.apache.commons.lang3.mutable.MutableObject;
-
 /**
  * Operates on classes without using reflection.
  *
@@ -1118,19 +1117,17 @@ public static Iterable<Class<?>> hierarchy(final 
Class<?> type) {
      */
     public static Iterable<Class<?>> hierarchy(final Class<?> type, final 
Interfaces interfacesBehavior) {
         final Iterable<Class<?>> classes = () -> {
-            final MutableObject<Class<?>> next = new MutableObject<>(type);
+            final AtomicReference<Class<?>> next = new AtomicReference<>(type);
             return new Iterator<Class<?>>() {
 
                 @Override
                 public boolean hasNext() {
-                    return next.getValue() != null;
+                    return next.get() != null;
                 }
 
                 @Override
                 public Class<?> next() {
-                    final Class<?> result = next.getValue();
-                    next.setValue(result.getSuperclass());
-                    return result;
+                    return next.getAndUpdate(Class::getSuperclass);
                 }
 
                 @Override

Reply via email to