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