You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2025/08/29 22:42:15 UTC

(commons-lang) branch master updated (c67935e9b -> eaf6cac44)

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

ggregory pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git


    from c67935e9b Don't check accessibility twice in MemberUtils.setAccessibleWorkaround(T)
     new 0ca9e764f Javadoc
     new aff53521b Reduce vertical whitespace
     new eaf6cac44 Internal refactoring

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../commons/lang3/reflect/AccessibleObjects.java}  | 21 +++++++++-------
 .../apache/commons/lang3/reflect/FieldUtils.java   | 29 +++++++++-------------
 .../apache/commons/lang3/reflect/MemberUtils.java  | 10 +++-----
 .../apache/commons/lang3/reflect/MethodUtils.java  |  4 +--
 4 files changed, 29 insertions(+), 35 deletions(-)
 copy src/{test/java/org/apache/commons/lang3/reflect/Lang1703Test.java => main/java/org/apache/commons/lang3/reflect/AccessibleObjects.java} (63%)


(commons-lang) 02/03: Reduce vertical whitespace

Posted by gg...@apache.org.
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 aff53521bcc8840e88b52294e8ef3906e302869e
Author: Gary D. Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 29 18:14:58 2025 -0400

    Reduce vertical whitespace
---
 src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java b/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
index 9e5378bf8..87b375b40 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
@@ -586,7 +586,6 @@ public static void removeFinalModifier(final Field field) {
     @Deprecated
     public static void removeFinalModifier(final Field field, final boolean forceAccess) {
         Objects.requireNonNull(field, "field");
-
         try {
             if (Modifier.isFinal(field.getModifiers())) {
                 // Do all JREs implement Field with a private ivar called "modifiers"?
@@ -605,10 +604,7 @@ public static void removeFinalModifier(final Field field, final boolean forceAcc
             }
         } catch (final NoSuchFieldException | IllegalAccessException e) {
             if (SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_12)) {
-              throw new UnsupportedOperationException(
-                  "In java 12+ final cannot be removed.",
-                  e
-              );
+                throw new UnsupportedOperationException("In java 12+ final cannot be removed.", e);
             }
             // else no exception is thrown because we can modify final.
         }


(commons-lang) 03/03: Internal refactoring

Posted by gg...@apache.org.
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 eaf6cac449389d212fa92e44f1d727b2039649d6
Author: Gary D. Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 29 18:42:09 2025 -0400

    Internal refactoring
---
 .../commons/lang3/reflect/AccessibleObjects.java   | 38 ++++++++++++++++++++++
 .../apache/commons/lang3/reflect/FieldUtils.java   | 23 +++++++------
 .../apache/commons/lang3/reflect/MemberUtils.java  |  8 ++---
 .../apache/commons/lang3/reflect/MethodUtils.java  |  4 +--
 4 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/reflect/AccessibleObjects.java b/src/main/java/org/apache/commons/lang3/reflect/AccessibleObjects.java
new file mode 100644
index 000000000..0511403f8
--- /dev/null
+++ b/src/main/java/org/apache/commons/lang3/reflect/AccessibleObjects.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.lang3.reflect;
+
+import java.lang.reflect.AccessibleObject;
+
+/**
+ * Null-safe operations on {@link AccessibleObject}.
+ */
+class AccessibleObjects {
+
+    static boolean isAccessible(final AccessibleObject accessibleObject) {
+        return accessibleObject == null || accessibleObject.isAccessible();
+    }
+
+    static boolean setAccessible(final AccessibleObject accessibleObject) {
+        if (!isAccessible(accessibleObject)) {
+            accessibleObject.setAccessible(true);
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java b/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
index 87b375b40..f108ff1c6 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/FieldUtils.java
@@ -399,12 +399,7 @@ public static Object readField(final Field field, final Object target) throws Il
      */
     public static Object readField(final Field field, final Object target, final boolean forceAccess) throws IllegalAccessException {
         Objects.requireNonNull(field, "field");
-        if (forceAccess && !field.isAccessible()) {
-            field.setAccessible(true);
-        } else {
-            MemberUtils.setAccessibleWorkaround(field);
-        }
-        return field.get(target);
+        return setAccessible(field, forceAccess).get(target);
     }
 
     /**
@@ -610,6 +605,15 @@ public static void removeFinalModifier(final Field field, final boolean forceAcc
         }
     }
 
+    static Field setAccessible(final Field field, final boolean forceAccess) {
+        if (forceAccess && !field.isAccessible()) {
+            field.setAccessible(true);
+        } else {
+            MemberUtils.setAccessibleWorkaround(field);
+        }
+        return field;
+    }
+
     /**
      * Writes a {@code public} {@link Field}. Only the specified class will be considered.
      *
@@ -762,12 +766,7 @@ public static void writeField(final Field field, final Object target, final Obje
     public static void writeField(final Field field, final Object target, final Object value, final boolean forceAccess)
             throws IllegalAccessException {
         Objects.requireNonNull(field, "field");
-        if (forceAccess && !field.isAccessible()) {
-            field.setAccessible(true);
-        } else {
-            MemberUtils.setAccessibleWorkaround(field);
-        }
-        field.set(target, value);
+        setAccessible(field, forceAccess).set(target, value);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
index 6ff4ff7b9..6de4a8490 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
@@ -282,7 +282,7 @@ static boolean isMatchingMethod(final Method method, final Class<?>[] parameterT
      * @param modifiers to test.
      * @return {@code true} unless {@code package}/{@code protected}/{@code private} modifier detected
      */
-    static boolean isPackageAccess(final int modifiers) {
+    static boolean isPackage(final int modifiers) {
         return (modifiers & ACCESS_TEST) == 0;
     }
 
@@ -322,16 +322,16 @@ static boolean isStatic(final Member member) {
      * @return a boolean indicating whether the accessibility of the object was set to true.
      */
     static <T extends AccessibleObject> T setAccessibleWorkaround(final T obj) {
-        if (obj == null || obj.isAccessible()) {
+        if (AccessibleObjects.isAccessible(obj)) {
             return obj;
         }
         final Member m = (Member) obj;
-        if (isPublic(m) && isPackageAccess(m.getDeclaringClass().getModifiers())) {
+        if (isPublic(m) && isPackage(m.getDeclaringClass().getModifiers())) {
             try {
                 obj.setAccessible(true);
                 return obj;
             } catch (final SecurityException ignored) {
-                // ignore in favor of subsequent IllegalAccessException
+                // Ignore in favor of subsequent IllegalAccessException
             }
         }
         return obj;
diff --git a/src/main/java/org/apache/commons/lang3/reflect/MethodUtils.java b/src/main/java/org/apache/commons/lang3/reflect/MethodUtils.java
index 8970d636c..ba892f397 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/MethodUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/MethodUtils.java
@@ -298,9 +298,7 @@ private static Method getInvokeMethod(final boolean forceAccess, final String me
         final Method method;
         if (forceAccess) {
             method = getMatchingMethod(cls, methodName, parameterTypes);
-            if (method != null && !method.isAccessible()) {
-                method.setAccessible(true);
-            }
+            AccessibleObjects.setAccessible(method);
         } else {
             method = getMatchingAccessibleMethod(cls, methodName, parameterTypes);
         }


(commons-lang) 01/03: Javadoc

Posted by gg...@apache.org.
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 0ca9e764fdc7e08094ae20d80b25369644fc4892
Author: Gary D. Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 29 18:14:40 2025 -0400

    Javadoc
---
 src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
index 219bec7d2..6ff4ff7b9 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
@@ -320,8 +320,6 @@ static boolean isStatic(final Member member) {
      *
      * @param obj the AccessibleObject to set as accessible, may be null.
      * @return a boolean indicating whether the accessibility of the object was set to true.
-     * @throws SecurityException if an underlying accessible object's method denies the request.
-     * @see SecurityManager#checkPermission
      */
     static <T extends AccessibleObject> T setAccessibleWorkaround(final T obj) {
         if (obj == null || obj.isAccessible()) {