> 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

Reply via email to