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