CrackMe.apk
Download file
package com.google.common.util.concurrent;
import androidx.concurrent.futures.AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.util.concurrent.internal.InternalFutureFailureAccess;
import com.google.common.util.concurrent.internal.InternalFutures;
import java.util.Locale;
import java.util.Objects;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.concurrent.locks.LockSupport;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.CheckForNull;
import sun.misc.Unsafe;
@ElementTypesAreNonnullByDefault
public abstract class AbstractFuture<V> extends InternalFutureFailureAccess implements ListenableFuture<V> {
/* access modifiers changed from: private */
public static final AtomicHelper ATOMIC_HELPER;
/* access modifiers changed from: private */
public static final boolean GENERATE_CANCELLATION_CAUSES;
private static final Object NULL = new Object();
private static final long SPIN_THRESHOLD_NANOS = 1000;
private static final Logger log;
/* access modifiers changed from: private */
@CheckForNull
public volatile Listener listeners;
/* access modifiers changed from: private */
@CheckForNull
public volatile Object value;
/* access modifiers changed from: private */
@CheckForNull
public volatile Waiter waiters;
interface Trusted<V> extends ListenableFuture<V> {
}
/* access modifiers changed from: protected */
public void afterDone() {
}
/* access modifiers changed from: protected */
public void interruptTask() {
}
static {
boolean z;
AtomicHelper atomicHelper;
Class<AbstractFuture> cls = AbstractFuture.class;
try {
z = Boolean.parseBoolean(System.getProperty("guava.concurrent.generate_cancellation_cause", "false"));
} catch (SecurityException unused) {
z = false;
}
GENERATE_CANCELLATION_CAUSES = z;
log = Logger.getLogger(cls.getName());
Throwable th = null;
try {
atomicHelper = new UnsafeAtomicHelper();
th = null;
} catch (Throwable th2) {
atomicHelper = new SynchronizedHelper();
th = th2;
}
ATOMIC_HELPER = atomicHelper;
Class<LockSupport> cls2 = LockSupport.class;
if (th != null) {
Logger logger = log;
logger.log(Level.SEVERE, "UnsafeAtomicHelper is broken!", th);
logger.log(Level.SEVERE, "SafeAtomicHelper is broken!", th);
}
}
static abstract class TrustedFuture<V> extends AbstractFuture<V> implements Trusted<V> {
TrustedFuture() {
}
@ParametricNullness
public final V get() throws InterruptedException, ExecutionException {
return AbstractFuture.super.get();
}
@ParametricNullness
public final V get(long j, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
return AbstractFuture.super.get(j, timeUnit);
}
public final boolean isDone() {
return AbstractFuture.super.isDone();
}
public final boolean isCancelled() {
return AbstractFuture.super.isCancelled();
}
public final void addListener(Runnable runnable, Executor executor) {
AbstractFuture.super.addListener(runnable, executor);
}
public final boolean cancel(boolean z) {
return AbstractFuture.super.cancel(z);
}
}
private static final class Waiter {
static final Waiter TOMBSTONE = new Waiter(false);
@CheckForNull
volatile Waiter next;
@CheckForNull
volatile Thread thread;
Waiter(boolean z) {
}
Waiter() {
AbstractFuture.ATOMIC_HELPER.putThread(this, Thread.currentThread());
}
/* access modifiers changed from: package-private */
public void setNext(@CheckForNull Waiter waiter) {
AbstractFuture.ATOMIC_HELPER.putNext(this, waiter);
}
/* access modifiers changed from: package-private */
public void unpark() {
Thread thread2 = this.thread;
if (thread2 != null) {
this.thread = null;
LockSupport.unpark(thread2);
}
}
}
private void removeWaiter(Waiter waiter) {
waiter.thread = null;
while (true) {
Waiter waiter2 = this.waiters;
if (waiter2 != Waiter.TOMBSTONE) {
Waiter waiter3 = null;
while (waiter2 != null) {
Waiter waiter4 = waiter2.next;
if (waiter2.thread != null) {
waiter3 = waiter2;
} else if (waiter3 != null) {
waiter3.next = waiter4;
if (waiter3.thread == null) {
}
} else if (!ATOMIC_HELPER.casWaiters(this, waiter2, waiter4)) {
}
waiter2 = waiter4;
}
return;
}
return;
}
}
private static final class Listener {
static final Listener TOMBSTONE = new Listener();
@CheckForNull
final Executor executor;
@CheckForNull
Listener next;
@CheckForNull
final Runnable task;
Listener(Runnable runnable, Executor executor2) {
this.task = runnable;
this.executor = executor2;
}
Listener() {
this.task = null;
this.executor = null;
}
}
private static final class Failure {
static final Failure FALLBACK_INSTANCE = new Failure(new Throwable("Failure occurred while trying to finish a future.") {
public synchronized Throwable fillInStackTrace() {
return this;
}
});
final Throwable exception;
Failure(Throwable th) {
this.exception = (Throwable) Preconditions.checkNotNull(th);
}
}
private static final class Cancellation {
@CheckForNull
static final Cancellation CAUSELESS_CANCELLED;
@CheckForNull
static final Cancellation CAUSELESS_INTERRUPTED;
@CheckForNull
final Throwable cause;
final boolean wasInterrupted;
static {
if (AbstractFuture.GENERATE_CANCELLATION_CAUSES) {
CAUSELESS_CANCELLED = null;
CAUSELESS_INTERRUPTED = null;
return;
}
CAUSELESS_CANCELLED = new Cancellation(false, (Throwable) null);
CAUSELESS_INTERRUPTED = new Cancellation(true, (Throwable) null);
}
Cancellation(boolean z, @CheckForNull Throwable th) {
this.wasInterrupted = z;
this.cause = th;
}
}
private static final class SetFuture<V> implements Runnable {
final ListenableFuture<? extends V> future;
final AbstractFuture<V> owner;
SetFuture(AbstractFuture<V> abstractFuture, ListenableFuture<? extends V> listenableFuture) {
this.owner = abstractFuture;
this.future = listenableFuture;
}
public void run() {
if (this.owner.value == this) {
if (AbstractFuture.ATOMIC_HELPER.casValue(this.owner, this, AbstractFuture.getFutureValue(this.future))) {
AbstractFuture.complete(this.owner);
}
}
}
}
protected AbstractFuture() {
}
@ParametricNullness
public V get(long j, TimeUnit timeUnit) throws InterruptedException, TimeoutException, ExecutionException {
long j2 = j;
TimeUnit timeUnit2 = timeUnit;
long nanos = timeUnit2.toNanos(j2);
if (!Thread.interrupted()) {
Object obj = this.value;
if ((obj != null) && (!(obj instanceof SetFuture))) {
return getDoneValue(obj);
}
long nanoTime = nanos > 0 ? System.nanoTime() + nanos : 0;
if (nanos >= 1000) {
Waiter waiter = this.waiters;
if (waiter != Waiter.TOMBSTONE) {
Waiter waiter2 = new Waiter();
do {
waiter2.setNext(waiter);
if (ATOMIC_HELPER.casWaiters(this, waiter, waiter2)) {
do {
OverflowAvoidingLockSupport.parkNanos(this, nanos);
if (!Thread.interrupted()) {
Object obj2 = this.value;
if ((obj2 != null) && (!(obj2 instanceof SetFuture))) {
return getDoneValue(obj2);
}
nanos = nanoTime - System.nanoTime();
} else {
removeWaiter(waiter2);
throw new InterruptedException();
}
} while (nanos >= 1000);
removeWaiter(waiter2);
} else {
waiter = this.waiters;
}
} while (waiter != Waiter.TOMBSTONE);
}
Object obj3 = this.value;
Objects.requireNonNull(obj3);
return getDoneValue(obj3);
}
while (nanos > 0) {
Object obj4 = this.value;
if ((obj4 != null) && (!(obj4 instanceof SetFuture))) {
return getDoneValue(obj4);
}
if (!Thread.interrupted()) {
nanos = nanoTime - System.nanoTime();
} else {
throw new InterruptedException();
}
}
String abstractFuture = toString();
String lowerCase = timeUnit.toString().toLowerCase(Locale.ROOT);
String lowerCase2 = timeUnit.toString().toLowerCase(Locale.ROOT);
StringBuilder sb = new StringBuilder(String.valueOf(lowerCase2).length() + 28);
sb.append("Waited ");
sb.append(j2);
sb.append(" ");
sb.append(lowerCase2);
String sb2 = sb.toString();
if (nanos + 1000 < 0) {
String concat = String.valueOf(sb2).concat(" (plus ");
long j3 = -nanos;
long convert = timeUnit2.convert(j3, TimeUnit.NANOSECONDS);
long nanos2 = j3 - timeUnit2.toNanos(convert);
int i = (convert > 0 ? 1 : (convert == 0 ? 0 : -1));
boolean z = i == 0 || nanos2 > 1000;
if (i > 0) {
String valueOf = String.valueOf(concat);
StringBuilder sb3 = new StringBuilder(String.valueOf(valueOf).length() + 21 + String.valueOf(lowerCase).length());
sb3.append(valueOf);
sb3.append(convert);
sb3.append(" ");
sb3.append(lowerCase);
String sb4 = sb3.toString();
if (z) {
sb4 = String.valueOf(sb4).concat(",");
}
concat = String.valueOf(sb4).concat(" ");
}
if (z) {
String valueOf2 = String.valueOf(concat);
StringBuilder sb5 = new StringBuilder(String.valueOf(valueOf2).length() + 33);
sb5.append(valueOf2);
sb5.append(nanos2);
sb5.append(" nanoseconds ");
concat = sb5.toString();
}
sb2 = String.valueOf(concat).concat("delay)");
}
if (isDone()) {
throw new TimeoutException(String.valueOf(sb2).concat(" but future completed as timeout expired"));
}
StringBuilder sb6 = new StringBuilder(String.valueOf(sb2).length() + 5 + String.valueOf(abstractFuture).length());
sb6.append(sb2);
sb6.append(" for ");
sb6.append(abstractFuture);
throw new TimeoutException(sb6.toString());
}
throw new InterruptedException();
}
@ParametricNullness
public V get() throws InterruptedException, ExecutionException {
Object obj;
if (!Thread.interrupted()) {
Object obj2 = this.value;
if ((obj2 != null) && (!(obj2 instanceof SetFuture))) {
return getDoneValue(obj2);
}
Waiter waiter = this.waiters;
if (waiter != Waiter.TOMBSTONE) {
Waiter waiter2 = new Waiter();
do {
waiter2.setNext(waiter);
if (ATOMIC_HELPER.casWaiters(this, waiter, waiter2)) {
do {
LockSupport.park(this);
if (!Thread.interrupted()) {
obj = this.value;
} else {
removeWaiter(waiter2);
throw new InterruptedException();
}
} while (!((obj != null) & (!(obj instanceof SetFuture))));
return getDoneValue(obj);
}
waiter = this.waiters;
} while (waiter != Waiter.TOMBSTONE);
}
Object obj3 = this.value;
Objects.requireNonNull(obj3);
return getDoneValue(obj3);
}
throw new InterruptedException();
}
@ParametricNullness
private V getDoneValue(Object obj) throws ExecutionException {
if (obj instanceof Cancellation) {
throw cancellationExceptionWithCause("Task was cancelled.", ((Cancellation) obj).cause);
} else if (obj instanceof Failure) {
throw new ExecutionException(((Failure) obj).exception);
} else if (obj == NULL) {
return NullnessCasts.uncheckedNull();
} else {
return obj;
}
}
public boolean isDone() {
Object obj = this.value;
return (!(obj instanceof SetFuture)) & (obj != null);
}
public boolean isCancelled() {
return this.value instanceof Cancellation;
}
/* JADX WARNING: type inference failed for: r0v5, types: [com.google.common.util.concurrent.ListenableFuture, com.google.common.util.concurrent.ListenableFuture<? extends V>] */
/* JADX WARNING: Multi-variable type inference failed */
/* JADX WARNING: Unknown variable types count: 1 */
/* Code decompiled incorrectly, please refer to instructions dump. */
public boolean cancel(boolean r8) {
/*
r7 = this;
java.lang.Object r0 = r7.value
r1 = 1
r2 = 0
if (r0 != 0) goto L_0x0008
r3 = 1
goto L_0x0009
L_0x0008:
r3 = 0
L_0x0009:
boolean r4 = r0 instanceof com.google.common.util.concurrent.AbstractFuture.SetFuture
r3 = r3 | r4
if (r3 == 0) goto L_0x0064
boolean r3 = GENERATE_CANCELLATION_CAUSES
if (r3 == 0) goto L_0x001f
com.google.common.util.concurrent.AbstractFuture$Cancellation r3 = new com.google.common.util.concurrent.AbstractFuture$Cancellation
java.util.concurrent.CancellationException r4 = new java.util.concurrent.CancellationException
java.lang.String r5 = "Future.cancel() was called."
r4.<init>(r5)
r3.<init>(r8, r4)
goto L_0x0029
L_0x001f:
if (r8 == 0) goto L_0x0024
com.google.common.util.concurrent.AbstractFuture$Cancellation r3 = com.google.common.util.concurrent.AbstractFuture.Cancellation.CAUSELESS_INTERRUPTED
goto L_0x0026
L_0x0024:
com.google.common.util.concurrent.AbstractFuture$Cancellation r3 = com.google.common.util.concurrent.AbstractFuture.Cancellation.CAUSELESS_CANCELLED
L_0x0026:
java.util.Objects.requireNonNull(r3)
L_0x0029:
r5 = 0
r4 = r7
L_0x002b:
com.google.common.util.concurrent.AbstractFuture$AtomicHelper r6 = ATOMIC_HELPER
boolean r6 = r6.casValue(r4, r0, r3)
if (r6 == 0) goto L_0x005c
if (r8 == 0) goto L_0x0038
r4.interruptTask()
L_0x0038:
complete(r4)
boolean r4 = r0 instanceof com.google.common.util.concurrent.AbstractFuture.SetFuture
if (r4 == 0) goto L_0x0065
com.google.common.util.concurrent.AbstractFuture$SetFuture r0 = (com.google.common.util.concurrent.AbstractFuture.SetFuture) r0
com.google.common.util.concurrent.ListenableFuture<? extends V> r0 = r0.future
boolean r4 = r0 instanceof com.google.common.util.concurrent.AbstractFuture.Trusted
if (r4 == 0) goto L_0x0058
r4 = r0
com.google.common.util.concurrent.AbstractFuture r4 = (com.google.common.util.concurrent.AbstractFuture) r4
java.lang.Object r0 = r4.value
if (r0 != 0) goto L_0x0050
r5 = 1
goto L_0x0051
L_0x0050:
r5 = 0
L_0x0051:
boolean r6 = r0 instanceof com.google.common.util.concurrent.AbstractFuture.SetFuture
r5 = r5 | r6
if (r5 == 0) goto L_0x0065
r5 = 1
goto L_0x002b
L_0x0058:
r0.cancel(r8)
goto L_0x0065
L_0x005c:
java.lang.Object r0 = r4.value
boolean r6 = r0 instanceof com.google.common.util.concurrent.AbstractFuture.SetFuture
if (r6 != 0) goto L_0x002b
r1 = r5
goto L_0x0065
L_0x0064:
r1 = 0
L_0x0065:
return r1
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.common.util.concurrent.AbstractFuture.cancel(boolean):boolean");
}
/* access modifiers changed from: protected */
public final boolean wasInterrupted() {
Object obj = this.value;
return (obj instanceof Cancellation) && ((Cancellation) obj).wasInterrupted;
}
public void addListener(Runnable runnable, Executor executor) {
Listener listener;
Preconditions.checkNotNull(runnable, "Runnable was null.");
Preconditions.checkNotNull(executor, "Executor was null.");
if (isDone() || (listener = this.listeners) == Listener.TOMBSTONE) {
executeListener(runnable, executor);
}
Listener listener2 = new Listener(runnable, executor);
do {
listener2.next = listener;
if (!ATOMIC_HELPER.casListeners(this, listener, listener2)) {
listener = this.listeners;
} else {
return;
}
} while (listener != Listener.TOMBSTONE);
executeListener(runnable, executor);
}
/* access modifiers changed from: protected */
public boolean set(@ParametricNullness V v) {
if (v == null) {
v = NULL;
}
if (!ATOMIC_HELPER.casValue(this, (Object) null, v)) {
return false;
}
complete(this);
return true;
}
/* access modifiers changed from: protected */
public boolean setException(Throwable th) {
if (!ATOMIC_HELPER.casValue(this, (Object) null, new Failure((Throwable) Preconditions.checkNotNull(th)))) {
return false;
}
complete(this);
return true;
}
/* access modifiers changed from: protected */
public boolean setFuture(ListenableFuture<? extends V> listenableFuture) {
SetFuture setFuture;
Failure failure;
Preconditions.checkNotNull(listenableFuture);
Object obj = this.value;
if (obj == null) {
if (listenableFuture.isDone()) {
if (!ATOMIC_HELPER.casValue(this, (Object) null, getFutureValue(listenableFuture))) {
return false;
}
complete(this);
return true;
}
setFuture = new SetFuture(this, listenableFuture);
if (ATOMIC_HELPER.casValue(this, (Object) null, setFuture)) {
try {
listenableFuture.addListener(setFuture, DirectExecutor.INSTANCE);
} catch (Throwable unused) {
failure = Failure.FALLBACK_INSTANCE;
}
return true;
}
obj = this.value;
}
if (obj instanceof Cancellation) {
listenableFuture.cancel(((Cancellation) obj).wasInterrupted);
}
return false;
ATOMIC_HELPER.casValue(this, setFuture, failure);
return true;
}
/* access modifiers changed from: private */
public static Object getFutureValue(ListenableFuture<?> listenableFuture) {
Throwable tryInternalFastPathGetFailure;
if (listenableFuture instanceof Trusted) {
Object obj = ((AbstractFuture) listenableFuture).value;
if (obj instanceof Cancellation) {
Cancellation cancellation = (Cancellation) obj;
if (cancellation.wasInterrupted) {
obj = cancellation.cause != null ? new Cancellation(false, cancellation.cause) : Cancellation.CAUSELESS_CANCELLED;
}
}
Objects.requireNonNull(obj);
return obj;
} else if ((listenableFuture instanceof InternalFutureFailureAccess) && (tryInternalFastPathGetFailure = InternalFutures.tryInternalFastPathGetFailure((InternalFutureFailureAccess) listenableFuture)) != null) {
return new Failure(tryInternalFastPathGetFailure);
} else {
boolean isCancelled = listenableFuture.isCancelled();
if ((!GENERATE_CANCELLATION_CAUSES) && isCancelled) {
Cancellation cancellation2 = Cancellation.CAUSELESS_CANCELLED;
Objects.requireNonNull(cancellation2);
return cancellation2;
}
try {
Object uninterruptibly = getUninterruptibly(listenableFuture);
if (isCancelled) {
String valueOf = String.valueOf(listenableFuture);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 84);
sb.append("get() did not throw CancellationException, despite reporting isCancelled() == true: ");
sb.append(valueOf);
return new Cancellation(false, new IllegalArgumentException(sb.toString()));
} else if (uninterruptibly == null) {
return NULL;
} else {
return uninterruptibly;
}
} catch (ExecutionException e) {
if (!isCancelled) {
return new Failure(e.getCause());
}
String valueOf2 = String.valueOf(listenableFuture);
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf2).length() + 84);
sb2.append("get() did not throw CancellationException, despite reporting isCancelled() == true: ");
sb2.append(valueOf2);
return new Cancellation(false, new IllegalArgumentException(sb2.toString(), e));
} catch (CancellationException e2) {
if (isCancelled) {
return new Cancellation(false, e2);
}
String valueOf3 = String.valueOf(listenableFuture);
StringBuilder sb3 = new StringBuilder(String.valueOf(valueOf3).length() + 77);
sb3.append("get() threw CancellationException, despite reporting isCancelled() == false: ");
sb3.append(valueOf3);
return new Failure(new IllegalArgumentException(sb3.toString(), e2));
} catch (Throwable th) {
return new Failure(th);
}
}
}
@ParametricNullness
private static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
V v;
boolean z = false;
while (true) {
try {
v = future.get();
break;
} catch (InterruptedException unused) {
z = true;
} catch (Throwable th) {
if (z) {
Thread.currentThread().interrupt();
}
throw th;
}
}
if (z) {
Thread.currentThread().interrupt();
}
return v;
}
/* access modifiers changed from: private */
public static void complete(AbstractFuture<?> abstractFuture) {
Listener listener = null;
AbstractFuture<V> abstractFuture2 = abstractFuture;
while (true) {
abstractFuture2.releaseWaiters();
abstractFuture2.afterDone();
Listener clearListeners = abstractFuture2.clearListeners(listener);
while (true) {
if (clearListeners != null) {
listener = clearListeners.next;
Runnable runnable = clearListeners.task;
Objects.requireNonNull(runnable);
Runnable runnable2 = runnable;
if (runnable instanceof SetFuture) {
SetFuture setFuture = (SetFuture) runnable;
AbstractFuture<V> abstractFuture3 = setFuture.owner;
if (abstractFuture3.value == setFuture) {
if (ATOMIC_HELPER.casValue(abstractFuture3, setFuture, getFutureValue(setFuture.future))) {
abstractFuture2 = abstractFuture3;
}
} else {
continue;
}
} else {
Executor executor = clearListeners.executor;
Objects.requireNonNull(executor);
Executor executor2 = executor;
executeListener(runnable, executor);
}
clearListeners = listener;
} else {
return;
}
}
}
}
/* access modifiers changed from: protected */
@CheckForNull
public final Throwable tryInternalFastPathGetFailure() {
if (!(this instanceof Trusted)) {
return null;
}
Object obj = this.value;
if (obj instanceof Failure) {
return ((Failure) obj).exception;
}
return null;
}
/* access modifiers changed from: package-private */
public final void maybePropagateCancellationTo(@CheckForNull Future<?> future) {
if ((future != null) && isCancelled()) {
future.cancel(wasInterrupted());
}
}
private void releaseWaiters() {
Waiter waiter;
do {
waiter = this.waiters;
} while (!ATOMIC_HELPER.casWaiters(this, waiter, Waiter.TOMBSTONE));
while (waiter != null) {
waiter.unpark();
waiter = waiter.next;
}
}
@CheckForNull
private Listener clearListeners(@CheckForNull Listener listener) {
Listener listener2;
do {
listener2 = this.listeners;
} while (!ATOMIC_HELPER.casListeners(this, listener2, Listener.TOMBSTONE));
Listener listener3 = listener2;
Listener listener4 = listener;
Listener listener5 = listener3;
while (listener5 != null) {
Listener listener6 = listener5.next;
listener5.next = listener4;
listener4 = listener5;
listener5 = listener6;
}
return listener4;
}
public String toString() {
StringBuilder sb = new StringBuilder();
if (getClass().getName().startsWith("com.google.common.util.concurrent.")) {
sb.append(getClass().getSimpleName());
} else {
sb.append(getClass().getName());
}
sb.append('@');
sb.append(Integer.toHexString(System.identityHashCode(this)));
sb.append("[status=");
if (isCancelled()) {
sb.append("CANCELLED");
} else if (isDone()) {
addDoneString(sb);
} else {
addPendingString(sb);
}
sb.append("]");
return sb.toString();
}
/* access modifiers changed from: protected */
@CheckForNull
public String pendingToString() {
if (!(this instanceof ScheduledFuture)) {
return null;
}
long delay = ((ScheduledFuture) this).getDelay(TimeUnit.MILLISECONDS);
StringBuilder sb = new StringBuilder(41);
sb.append("remaining delay=[");
sb.append(delay);
sb.append(" ms]");
return sb.toString();
}
private void addPendingString(StringBuilder sb) {
String str;
int length = sb.length();
sb.append("PENDING");
Object obj = this.value;
if (obj instanceof SetFuture) {
sb.append(", setFuture=[");
appendUserObject(sb, ((SetFuture) obj).future);
sb.append("]");
} else {
try {
str = Strings.emptyToNull(pendingToString());
} catch (RuntimeException | StackOverflowError e) {
String valueOf = String.valueOf(e.getClass());
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf).length() + 38);
sb2.append("Exception thrown from implementation: ");
sb2.append(valueOf);
str = sb2.toString();
}
if (str != null) {
sb.append(", info=[");
sb.append(str);
sb.append("]");
}
}
if (isDone()) {
sb.delete(length, sb.length());
addDoneString(sb);
}
}
private void addDoneString(StringBuilder sb) {
try {
Object uninterruptibly = getUninterruptibly(this);
sb.append("SUCCESS, result=[");
appendResultObject(sb, uninterruptibly);
sb.append("]");
} catch (ExecutionException e) {
sb.append("FAILURE, cause=[");
sb.append(e.getCause());
sb.append("]");
} catch (CancellationException unused) {
sb.append("CANCELLED");
} catch (RuntimeException e2) {
sb.append("UNKNOWN, cause=[");
sb.append(e2.getClass());
sb.append(" thrown from get()]");
}
}
private void appendResultObject(StringBuilder sb, @CheckForNull Object obj) {
if (obj == null) {
sb.append("null");
} else if (obj == this) {
sb.append("this future");
} else {
sb.append(obj.getClass().getName());
sb.append("@");
sb.append(Integer.toHexString(System.identityHashCode(obj)));
}
}
private void appendUserObject(StringBuilder sb, @CheckForNull Object obj) {
if (obj == this) {
try {
sb.append("this future");
} catch (RuntimeException | StackOverflowError e) {
sb.append("Exception thrown from implementation: ");
sb.append(e.getClass());
}
} else {
sb.append(obj);
}
}
private static void executeListener(Runnable runnable, Executor executor) {
try {
executor.execute(runnable);
} catch (RuntimeException e) {
Logger logger = log;
Level level = Level.SEVERE;
String valueOf = String.valueOf(runnable);
String valueOf2 = String.valueOf(executor);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 57 + String.valueOf(valueOf2).length());
sb.append("RuntimeException while executing runnable ");
sb.append(valueOf);
sb.append(" with executor ");
sb.append(valueOf2);
logger.log(level, sb.toString(), e);
}
}
private static abstract class AtomicHelper {
/* access modifiers changed from: package-private */
public abstract boolean casListeners(AbstractFuture<?> abstractFuture, @CheckForNull Listener listener, Listener listener2);
/* access modifiers changed from: package-private */
public abstract boolean casValue(AbstractFuture<?> abstractFuture, @CheckForNull Object obj, Object obj2);
/* access modifiers changed from: package-private */
public abstract boolean casWaiters(AbstractFuture<?> abstractFuture, @CheckForNull Waiter waiter, @CheckForNull Waiter waiter2);
/* access modifiers changed from: package-private */
public abstract void putNext(Waiter waiter, @CheckForNull Waiter waiter2);
/* access modifiers changed from: package-private */
public abstract void putThread(Waiter waiter, Thread thread);
private AtomicHelper() {
}
}
private static final class UnsafeAtomicHelper extends AtomicHelper {
static final long LISTENERS_OFFSET;
static final Unsafe UNSAFE;
static final long VALUE_OFFSET;
static final long WAITERS_OFFSET;
static final long WAITER_NEXT_OFFSET;
static final long WAITER_THREAD_OFFSET;
private UnsafeAtomicHelper() {
super();
}
/* JADX WARNING: Code restructure failed: missing block: B:11:0x005f, code lost:
r0 = move-exception;
*/
/* JADX WARNING: Code restructure failed: missing block: B:13:0x006b, code lost:
throw new java.lang.RuntimeException("Could not initialize intrinsics", r0.getCause());
*/
/* JADX WARNING: Code restructure failed: missing block: B:3:?, code lost:
r0 = (sun.misc.Unsafe) java.security.AccessController.doPrivileged(new com.google.common.util.concurrent.AbstractFuture.UnsafeAtomicHelper.AnonymousClass1());
*/
/* JADX WARNING: Failed to process nested try/catch */
/* JADX WARNING: Missing exception handler attribute for start block: B:2:0x0005 */
static {
/*
sun.misc.Unsafe r0 = sun.misc.Unsafe.getUnsafe() // Catch:{ SecurityException -> 0x0005 }
goto L_0x0010
L_0x0005:
com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper$1 r0 = new com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper$1 // Catch:{ PrivilegedActionException -> 0x005f }
r0.<init>() // Catch:{ PrivilegedActionException -> 0x005f }
java.lang.Object r0 = java.security.AccessController.doPrivileged(r0) // Catch:{ PrivilegedActionException -> 0x005f }
sun.misc.Unsafe r0 = (sun.misc.Unsafe) r0 // Catch:{ PrivilegedActionException -> 0x005f }
L_0x0010:
java.lang.Class<com.google.common.util.concurrent.AbstractFuture> r1 = com.google.common.util.concurrent.AbstractFuture.class
java.lang.String r2 = "waiters"
java.lang.reflect.Field r2 = r1.getDeclaredField(r2) // Catch:{ Exception -> 0x0055 }
long r2 = r0.objectFieldOffset(r2) // Catch:{ Exception -> 0x0055 }
WAITERS_OFFSET = r2 // Catch:{ Exception -> 0x0055 }
java.lang.String r2 = "listeners"
java.lang.reflect.Field r2 = r1.getDeclaredField(r2) // Catch:{ Exception -> 0x0055 }
long r2 = r0.objectFieldOffset(r2) // Catch:{ Exception -> 0x0055 }
LISTENERS_OFFSET = r2 // Catch:{ Exception -> 0x0055 }
java.lang.String r2 = "value"
java.lang.reflect.Field r1 = r1.getDeclaredField(r2) // Catch:{ Exception -> 0x0055 }
long r1 = r0.objectFieldOffset(r1) // Catch:{ Exception -> 0x0055 }
VALUE_OFFSET = r1 // Catch:{ Exception -> 0x0055 }
java.lang.Class<com.google.common.util.concurrent.AbstractFuture$Waiter> r1 = com.google.common.util.concurrent.AbstractFuture.Waiter.class
java.lang.String r2 = "thread"
java.lang.reflect.Field r1 = r1.getDeclaredField(r2) // Catch:{ Exception -> 0x0055 }
long r1 = r0.objectFieldOffset(r1) // Catch:{ Exception -> 0x0055 }
WAITER_THREAD_OFFSET = r1 // Catch:{ Exception -> 0x0055 }
java.lang.Class<com.google.common.util.concurrent.AbstractFuture$Waiter> r1 = com.google.common.util.concurrent.AbstractFuture.Waiter.class
java.lang.String r2 = "next"
java.lang.reflect.Field r1 = r1.getDeclaredField(r2) // Catch:{ Exception -> 0x0055 }
long r1 = r0.objectFieldOffset(r1) // Catch:{ Exception -> 0x0055 }
WAITER_NEXT_OFFSET = r1 // Catch:{ Exception -> 0x0055 }
UNSAFE = r0 // Catch:{ Exception -> 0x0055 }
return
L_0x0055:
r0 = move-exception
com.google.common.base.Throwables.throwIfUnchecked(r0)
java.lang.RuntimeException r1 = new java.lang.RuntimeException
r1.<init>(r0)
throw r1
L_0x005f:
r0 = move-exception
java.lang.RuntimeException r1 = new java.lang.RuntimeException
java.lang.Throwable r0 = r0.getCause()
java.lang.String r2 = "Could not initialize intrinsics"
r1.<init>(r2, r0)
throw r1
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.common.util.concurrent.AbstractFuture.UnsafeAtomicHelper.<clinit>():void");
}
/* access modifiers changed from: package-private */
public void putThread(Waiter waiter, Thread thread) {
UNSAFE.putObject(waiter, WAITER_THREAD_OFFSET, thread);
}
/* access modifiers changed from: package-private */
public void putNext(Waiter waiter, @CheckForNull Waiter waiter2) {
UNSAFE.putObject(waiter, WAITER_NEXT_OFFSET, waiter2);
}
/* access modifiers changed from: package-private */
public boolean casWaiters(AbstractFuture<?> abstractFuture, @CheckForNull Waiter waiter, @CheckForNull Waiter waiter2) {
return AbstractFuture$UnsafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(UNSAFE, abstractFuture, WAITERS_OFFSET, waiter, waiter2);
}
/* access modifiers changed from: package-private */
public boolean casListeners(AbstractFuture<?> abstractFuture, @CheckForNull Listener listener, Listener listener2) {
return AbstractFuture$UnsafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(UNSAFE, abstractFuture, LISTENERS_OFFSET, listener, listener2);
}
/* access modifiers changed from: package-private */
public boolean casValue(AbstractFuture<?> abstractFuture, @CheckForNull Object obj, Object obj2) {
return AbstractFuture$UnsafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(UNSAFE, abstractFuture, VALUE_OFFSET, obj, obj2);
}
}
private static final class SafeAtomicHelper extends AtomicHelper {
final AtomicReferenceFieldUpdater<AbstractFuture, Listener> listenersUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Object> valueUpdater;
final AtomicReferenceFieldUpdater<Waiter, Waiter> waiterNextUpdater;
final AtomicReferenceFieldUpdater<Waiter, Thread> waiterThreadUpdater;
final AtomicReferenceFieldUpdater<AbstractFuture, Waiter> waitersUpdater;
SafeAtomicHelper(AtomicReferenceFieldUpdater<Waiter, Thread> atomicReferenceFieldUpdater, AtomicReferenceFieldUpdater<Waiter, Waiter> atomicReferenceFieldUpdater2, AtomicReferenceFieldUpdater<AbstractFuture, Waiter> atomicReferenceFieldUpdater3, AtomicReferenceFieldUpdater<AbstractFuture, Listener> atomicReferenceFieldUpdater4, AtomicReferenceFieldUpdater<AbstractFuture, Object> atomicReferenceFieldUpdater5) {
super();
this.waiterThreadUpdater = atomicReferenceFieldUpdater;
this.waiterNextUpdater = atomicReferenceFieldUpdater2;
this.waitersUpdater = atomicReferenceFieldUpdater3;
this.listenersUpdater = atomicReferenceFieldUpdater4;
this.valueUpdater = atomicReferenceFieldUpdater5;
}
/* access modifiers changed from: package-private */
public void putThread(Waiter waiter, Thread thread) {
this.waiterThreadUpdater.lazySet(waiter, thread);
}
/* access modifiers changed from: package-private */
public void putNext(Waiter waiter, @CheckForNull Waiter waiter2) {
this.waiterNextUpdater.lazySet(waiter, waiter2);
}
/* access modifiers changed from: package-private */
public boolean casWaiters(AbstractFuture<?> abstractFuture, @CheckForNull Waiter waiter, @CheckForNull Waiter waiter2) {
return AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(this.waitersUpdater, abstractFuture, waiter, waiter2);
}
/* access modifiers changed from: package-private */
public boolean casListeners(AbstractFuture<?> abstractFuture, @CheckForNull Listener listener, Listener listener2) {
return AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(this.listenersUpdater, abstractFuture, listener, listener2);
}
/* access modifiers changed from: package-private */
public boolean casValue(AbstractFuture<?> abstractFuture, @CheckForNull Object obj, Object obj2) {
return AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0.m(this.valueUpdater, abstractFuture, obj, obj2);
}
}
private static final class SynchronizedHelper extends AtomicHelper {
private SynchronizedHelper() {
super();
}
/* access modifiers changed from: package-private */
public void putThread(Waiter waiter, Thread thread) {
waiter.thread = thread;
}
/* access modifiers changed from: package-private */
public void putNext(Waiter waiter, @CheckForNull Waiter waiter2) {
waiter.next = waiter2;
}
/* access modifiers changed from: package-private */
public boolean casWaiters(AbstractFuture<?> abstractFuture, @CheckForNull Waiter waiter, @CheckForNull Waiter waiter2) {
synchronized (abstractFuture) {
if (abstractFuture.waiters != waiter) {
return false;
}
Waiter unused = abstractFuture.waiters = waiter2;
return true;
}
}
/* access modifiers changed from: package-private */
public boolean casListeners(AbstractFuture<?> abstractFuture, @CheckForNull Listener listener, Listener listener2) {
synchronized (abstractFuture) {
if (abstractFuture.listeners != listener) {
return false;
}
Listener unused = abstractFuture.listeners = listener2;
return true;
}
}
/* access modifiers changed from: package-private */
public boolean casValue(AbstractFuture<?> abstractFuture, @CheckForNull Object obj, Object obj2) {
synchronized (abstractFuture) {
if (abstractFuture.value != obj) {
return false;
}
Object unused = abstractFuture.value = obj2;
return true;
}
}
}
private static CancellationException cancellationExceptionWithCause(String str, @CheckForNull Throwable th) {
CancellationException cancellationException = new CancellationException(str);
cancellationException.initCause(th);
return cancellationException;
}
}
Download file