final class com.google.common.util.concurrent.SequentialExecutor extends java.lang.Object implements java.util.concurrent.Executor
{
private static final java.util.logging.Logger log;
private final java.util.concurrent.Executor executor;
private final java.util.Deque queue;
private com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState;
private long workerRunCount;
private final com.google.common.util.concurrent.SequentialExecutor$QueueWorker worker;
void <init>(java.util.concurrent.Executor)
{
java.util.concurrent.Executor v;
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState v;
com.google.common.util.concurrent.SequentialExecutor v;
com.google.common.util.concurrent.SequentialExecutor$QueueWorker v;
java.lang.Object v;
java.util.ArrayDeque v;
v := @this: com.google.common.util.concurrent.SequentialExecutor;
v := @parameter: java.util.concurrent.Executor;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.ArrayDeque;
specialinvoke v.<java.util.ArrayDeque: void <init>()>();
v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue> = v;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState IDLE>;
v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState> = v;
v.<com.google.common.util.concurrent.SequentialExecutor: long workerRunCount> = 0L;
v = new com.google.common.util.concurrent.SequentialExecutor$QueueWorker;
specialinvoke v.<com.google.common.util.concurrent.SequentialExecutor$QueueWorker: void <init>(com.google.common.util.concurrent.SequentialExecutor)>(v);
v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$QueueWorker worker> = v;
v = staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object)>(v);
v.<com.google.common.util.concurrent.SequentialExecutor: java.util.concurrent.Executor executor> = v;
return;
}
public void execute(java.lang.Runnable)
{
java.lang.Runnable v;
byte v;
com.google.common.util.concurrent.SequentialExecutor$1 v;
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState v, v, v, v, v, v, v, v, v, v, v, v, v, v;
com.google.common.util.concurrent.SequentialExecutor$QueueWorker v;
boolean v, v, v, v;
java.lang.Throwable v, v, v, v;
long v, v;
java.util.Deque v, v, v, v, v, v;
java.util.concurrent.Executor v;
com.google.common.util.concurrent.SequentialExecutor v;
v := @this: com.google.common.util.concurrent.SequentialExecutor;
v := @parameter: java.lang.Runnable;
staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object)>(v);
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
entermonitor v;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState RUNNING>;
if v == v goto label;
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUED>;
if v != v goto label;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
interfaceinvoke v.<java.util.Deque: boolean add(java.lang.Object)>(v);
exitmonitor v;
label:
return;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: long workerRunCount>;
v = new com.google.common.util.concurrent.SequentialExecutor$1;
specialinvoke v.<com.google.common.util.concurrent.SequentialExecutor$1: void <init>(com.google.common.util.concurrent.SequentialExecutor,java.lang.Runnable)>(v, v);
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
interfaceinvoke v.<java.util.Deque: boolean add(java.lang.Object)>(v);
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUING>;
v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState> = v;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.concurrent.Executor executor>;
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$QueueWorker worker>;
interfaceinvoke v.<java.util.concurrent.Executor: void execute(java.lang.Runnable)>(v);
label:
goto label;
label:
v := @caughtexception;
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
entermonitor v;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState IDLE>;
if v == v goto label;
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUING>;
if v != v goto label;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
v = interfaceinvoke v.<java.util.Deque: boolean removeLastOccurrence(java.lang.Object)>(v);
if v == 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v instanceof java.util.concurrent.RejectedExecutionException;
if v == 0 goto label;
if v == 0 goto label;
label:
throw v;
label:
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUING>;
if v == v goto label;
v = 1;
goto label;
label:
v = 0;
label:
if v == 0 goto label;
return;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.Deque queue>;
entermonitor v;
label:
v = v.<com.google.common.util.concurrent.SequentialExecutor: long workerRunCount>;
v = v cmp v;
if v != 0 goto label;
v = v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState>;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUING>;
if v != v goto label;
v = <com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState QUEUED>;
v.<com.google.common.util.concurrent.SequentialExecutor: com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState> = v;
label:
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.RuntimeException from label to label with label;
catch java.lang.Error from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
public java.lang.String toString()
{
java.util.concurrent.Executor v;
com.google.common.util.concurrent.SequentialExecutor v;
int v, v, v;
java.lang.StringBuilder v;
java.lang.String v, v, v;
v := @this: com.google.common.util.concurrent.SequentialExecutor;
v = staticinvoke <java.lang.System: int identityHashCode(java.lang.Object)>(v);
v = v.<com.google.common.util.concurrent.SequentialExecutor: java.util.concurrent.Executor executor>;
v = staticinvoke <java.lang.String: java.lang.String valueOf(java.lang.Object)>(v);
v = staticinvoke <java.lang.String: java.lang.String valueOf(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.String: int length()>();
v = 32 + v;
specialinvoke v.<java.lang.StringBuilder: void <init>(int)>(v);
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("SequentialExecutor@\u0001{\u0001}");
return v;
}
static void <clinit>()
{
java.lang.Class v;
java.lang.String v;
java.util.logging.Logger v;
v = class "Lcom/google/common/util/concurrent/SequentialExecutor;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = staticinvoke <java.util.logging.Logger: java.util.logging.Logger getLogger(java.lang.String)>(v);
<com.google.common.util.concurrent.SequentialExecutor: java.util.logging.Logger log> = v;
return;
}
}