RFR: 8364544: Extract the checks of AtomicXxxFieldUpdater into a common place [v2]
Steve Armstrong
duke at openjdk.org
Tue Nov 25 02:52:33 UTC 2025
> The three AtomicXxxFieldUpdater classes (AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, and AtomicReferenceFieldUpdater) contain duplicate field validation and access checking logic in their constructors and helper methods.
>
> This change extracts the common validation and utility methods into a new package-private class FieldUpdaterUtil to eliminate code duplication and improve maintainability.
>
> Changes:
> - Added new FieldUpdaterUtil class with static utility methods:
> * validateField() - validates field type, volatile, and static checks
> * computeAccessClass() - determines correct class for access checks
> * isSamePackage() - checks if two classes are in same package
> * isAncestor() - checks classloader delegation chain
>
> - Updated AtomicIntegerFieldUpdater to use FieldUpdaterUtil
> * Simplified constructor to use validateField() and computeAccessClass()
> * Removed duplicate isAncestor() and isSamePackage() methods
>
> - Updated AtomicLongFieldUpdater to use FieldUpdaterUtil
> * Simplified constructor to use validateField() and computeAccessClass()
> * Removed duplicate isAncestor() and isSamePackage() methods
>
> - Updated AtomicReferenceFieldUpdater to use FieldUpdaterUtil
> * Simplified constructor to use validateField() and computeAccessClass()
> * Removed duplicate isAncestor() and isSamePackage() methods
>
> Existing tests in test/jdk/java/util/concurrent/tck and test/jdk/java/util/concurrent/atomic verify that the refactoring preserves the original behavior.
Steve Armstrong has updated the pull request incrementally with one additional commit since the last revision:
Replace legacy ReflectUtil with modern Reflection API
Replaced sun.reflect.misc.ReflectUtil with jdk.internal.reflect.Reflection
in atomic field updaters. Added getFieldWithAccess() method and
FieldAndModifiers record to FieldUpdaterUtil to consolidate field
access checking logic.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/28464/files
- new: https://git.openjdk.org/jdk/pull/28464/files/76a74fa2..72f27359
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=28464&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=28464&range=00-01
Stats: 74 lines in 4 files changed: 30 ins; 28 del; 16 mod
Patch: https://git.openjdk.org/jdk/pull/28464.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/28464/head:pull/28464
PR: https://git.openjdk.org/jdk/pull/28464
More information about the core-libs-dev
mailing list