Skip to content

Commit

Permalink
Eliminate the need for a few rawtypes and unchecked suppressions.
Browse files Browse the repository at this point in the history
The changes here are similar to some of those from cl/609475939: If we have an `AtomicReferenceFieldUpdater<AbstractFuture, ...>`, we don't have to keep the raw type or perform an unchecked cast. Instead, we can use it directly as an `AtomicReferenceFieldUpdater<? super AbstractFuture<?>, ...>`.

RELNOTES=n/a
PiperOrigin-RevId: 638008218
  • Loading branch information
cpovirk authored and Google Java Core Libraries committed May 28, 2024
1 parent 142ddbc commit f74135f
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1448,20 +1448,19 @@ boolean casValue(AbstractFuture<?> future, @CheckForNull Object expect, Object u
}

/** {@link AtomicHelper} based on {@link AtomicReferenceFieldUpdater}. */
@SuppressWarnings("rawtypes")
private static final class SafeAtomicHelper extends AtomicHelper {
final AtomicReferenceFieldUpdater<Waiter, Thread> waiterThreadUpdater;
final AtomicReferenceFieldUpdater<Waiter, Waiter> waiterNextUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Waiter> waitersUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Listener> listenersUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Object> valueUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Waiter> waitersUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Listener> listenersUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Object> valueUpdater;

SafeAtomicHelper(
AtomicReferenceFieldUpdater<Waiter, Thread> waiterThreadUpdater,
AtomicReferenceFieldUpdater<Waiter, Waiter> waiterNextUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Waiter> waitersUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Listener> listenersUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Object> valueUpdater) {
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Waiter> waitersUpdater,
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Listener> listenersUpdater,
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Object> valueUpdater) {
this.waiterThreadUpdater = waiterThreadUpdater;
this.waiterNextUpdater = waiterNextUpdater;
this.waitersUpdater = waitersUpdater;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,20 +158,19 @@ abstract void compareAndSetSeenExceptions(
}

private static final class SafeAtomicHelper extends AtomicHelper {
final AtomicReferenceFieldUpdater<AggregateFutureState<?>, @Nullable Set<Throwable>>
final AtomicReferenceFieldUpdater<
? super AggregateFutureState<?>, ? super @Nullable Set<Throwable>>
seenExceptionsUpdater;

final AtomicIntegerFieldUpdater<AggregateFutureState<?>> remainingCountUpdater;
final AtomicIntegerFieldUpdater<? super AggregateFutureState<?>> remainingCountUpdater;

@SuppressWarnings({"rawtypes", "unchecked"}) // Unavoidable with reflection API
SafeAtomicHelper(
AtomicReferenceFieldUpdater seenExceptionsUpdater,
AtomicIntegerFieldUpdater remainingCountUpdater) {
this.seenExceptionsUpdater =
(AtomicReferenceFieldUpdater<AggregateFutureState<?>, @Nullable Set<Throwable>>)
seenExceptionsUpdater;
this.remainingCountUpdater =
(AtomicIntegerFieldUpdater<AggregateFutureState<?>>) remainingCountUpdater;
AtomicReferenceFieldUpdater<
? super AggregateFutureState<?>, ? super @Nullable Set<Throwable>>
seenExceptionsUpdater,
AtomicIntegerFieldUpdater<? super AggregateFutureState<?>> remainingCountUpdater) {
this.seenExceptionsUpdater = seenExceptionsUpdater;
this.remainingCountUpdater = remainingCountUpdater;
}

@Override
Expand Down
13 changes: 6 additions & 7 deletions guava/src/com/google/common/util/concurrent/AbstractFuture.java
Original file line number Diff line number Diff line change
Expand Up @@ -1432,20 +1432,19 @@ boolean casValue(AbstractFuture<?> future, @CheckForNull Object expect, Object u
}

/** {@link AtomicHelper} based on {@link AtomicReferenceFieldUpdater}. */
@SuppressWarnings("rawtypes")
private static final class SafeAtomicHelper extends AtomicHelper {
final AtomicReferenceFieldUpdater<Waiter, Thread> waiterThreadUpdater;
final AtomicReferenceFieldUpdater<Waiter, Waiter> waiterNextUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Waiter> waitersUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Listener> listenersUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Object> valueUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Waiter> waitersUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Listener> listenersUpdater;
final AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Object> valueUpdater;

SafeAtomicHelper(
AtomicReferenceFieldUpdater<Waiter, Thread> waiterThreadUpdater,
AtomicReferenceFieldUpdater<Waiter, Waiter> waiterNextUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Waiter> waitersUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Listener> listenersUpdater,
AtomicReferenceFieldUpdater<AbstractFuture, Object> valueUpdater) {
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Waiter> waitersUpdater,
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Listener> listenersUpdater,
AtomicReferenceFieldUpdater<? super AbstractFuture<?>, Object> valueUpdater) {
this.waiterThreadUpdater = waiterThreadUpdater;
this.waiterNextUpdater = waiterNextUpdater;
this.waitersUpdater = waitersUpdater;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,20 +158,19 @@ abstract void compareAndSetSeenExceptions(
}

private static final class SafeAtomicHelper extends AtomicHelper {
final AtomicReferenceFieldUpdater<AggregateFutureState<?>, @Nullable Set<Throwable>>
final AtomicReferenceFieldUpdater<
? super AggregateFutureState<?>, ? super @Nullable Set<Throwable>>
seenExceptionsUpdater;

final AtomicIntegerFieldUpdater<AggregateFutureState<?>> remainingCountUpdater;
final AtomicIntegerFieldUpdater<? super AggregateFutureState<?>> remainingCountUpdater;

@SuppressWarnings({"rawtypes", "unchecked"}) // Unavoidable with reflection API
SafeAtomicHelper(
AtomicReferenceFieldUpdater seenExceptionsUpdater,
AtomicIntegerFieldUpdater remainingCountUpdater) {
this.seenExceptionsUpdater =
(AtomicReferenceFieldUpdater<AggregateFutureState<?>, @Nullable Set<Throwable>>)
seenExceptionsUpdater;
this.remainingCountUpdater =
(AtomicIntegerFieldUpdater<AggregateFutureState<?>>) remainingCountUpdater;
AtomicReferenceFieldUpdater<
? super AggregateFutureState<?>, ? super @Nullable Set<Throwable>>
seenExceptionsUpdater,
AtomicIntegerFieldUpdater<? super AggregateFutureState<?>> remainingCountUpdater) {
this.seenExceptionsUpdater = seenExceptionsUpdater;
this.remainingCountUpdater = remainingCountUpdater;
}

@Override
Expand Down

0 comments on commit f74135f

Please sign in to comment.