final class oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList extends java.util.IdentityHashMap implements java.io.Closeable
{
private final oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser closer;
private volatile boolean closed;
private volatile java.util.concurrent.CountDownLatch whenClosed;
private void <init>()
{
oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
specialinvoke v.<java.util.IdentityHashMap: void <init>()>();
v = new oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser;
specialinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser: void <init>(oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList)>(v);
v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser closer> = v;
return;
}
oadd.com.google.common.util.concurrent.ListenableFuture applyClosingFunction(oadd.com.google.common.util.concurrent.ClosingFuture$ClosingFunction, java.lang.Object) throws java.lang.Exception
{
java.lang.Throwable v;
java.util.concurrent.Executor v, v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v, v;
oadd.com.google.common.util.concurrent.ClosingFuture$ClosingFunction v;
oadd.com.google.common.util.concurrent.ListenableFuture v;
oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser v;
java.lang.Object v, v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
v := @parameter: oadd.com.google.common.util.concurrent.ClosingFuture$ClosingFunction;
v := @parameter: java.lang.Object;
v = new oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
specialinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void <init>()>();
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser closer>;
v = interfaceinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$ClosingFunction: java.lang.Object apply(oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser,java.lang.Object)>(v, v);
v = staticinvoke <oadd.com.google.common.util.concurrent.Futures: oadd.com.google.common.util.concurrent.ListenableFuture immediateFuture(java.lang.Object)>(v);
label:
v = staticinvoke <oadd.com.google.common.util.concurrent.MoreExecutors: java.util.concurrent.Executor directExecutor()>();
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void add(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
return v;
label:
v := @caughtexception;
v = staticinvoke <oadd.com.google.common.util.concurrent.MoreExecutors: java.util.concurrent.Executor directExecutor()>();
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void add(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
throw v;
catch java.lang.Throwable from label to label with label;
}
oadd.com.google.common.util.concurrent.FluentFuture applyAsyncClosingFunction(oadd.com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction, java.lang.Object) throws java.lang.Exception
{
java.lang.Throwable v;
java.util.concurrent.Executor v, v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v, v;
oadd.com.google.common.util.concurrent.ClosingFuture v;
oadd.com.google.common.util.concurrent.FluentFuture v;
oadd.com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction v;
oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser v;
java.lang.Object v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
v := @parameter: oadd.com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction;
v := @parameter: java.lang.Object;
v = new oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
specialinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void <init>()>();
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser closer>;
v = interfaceinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction: oadd.com.google.common.util.concurrent.ClosingFuture apply(oadd.com.google.common.util.concurrent.ClosingFuture$DeferredCloser,java.lang.Object)>(v, v);
specialinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture: void becomeSubsumedInto(oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList)>(v);
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture: oadd.com.google.common.util.concurrent.FluentFuture future>;
label:
v = staticinvoke <oadd.com.google.common.util.concurrent.MoreExecutors: java.util.concurrent.Executor directExecutor()>();
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void add(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
return v;
label:
v := @caughtexception;
v = staticinvoke <oadd.com.google.common.util.concurrent.MoreExecutors: java.util.concurrent.Executor directExecutor()>();
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void add(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
throw v;
catch java.lang.Throwable from label to label with label;
}
public void close()
{
java.lang.Throwable v;
java.util.Iterator v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v;
java.util.Set v;
java.util.concurrent.CountDownLatch v, v;
java.lang.Object v, v, v;
boolean v, v, v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed>;
if v == 0 goto label;
return;
label:
entermonitor v;
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed>;
if v == 0 goto label;
exitmonitor v;
label:
return;
label:
v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed> = 1;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.util.Set entrySet()>();
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = interfaceinvoke v.<java.util.Map$Entry: java.lang.Object getKey()>();
v = interfaceinvoke v.<java.util.Map$Entry: java.lang.Object getValue()>();
staticinvoke <oadd.com.google.common.util.concurrent.ClosingFuture: void closeQuietly(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
goto label;
label:
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: void clear()>();
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.util.concurrent.CountDownLatch whenClosed>;
if v == null goto label;
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.util.concurrent.CountDownLatch whenClosed>;
virtualinvoke v.<java.util.concurrent.CountDownLatch: void countDown()>();
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
void add(java.lang.AutoCloseable, java.util.concurrent.Executor)
{
java.lang.Throwable v;
java.util.concurrent.Executor v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v;
java.lang.AutoCloseable v;
boolean v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
v := @parameter: java.lang.AutoCloseable;
v := @parameter: java.util.concurrent.Executor;
staticinvoke <oadd.com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object)>(v);
if v != null goto label;
return;
label:
entermonitor v;
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed>;
if v != 0 goto label;
virtualinvoke v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
exitmonitor v;
label:
return;
label:
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
staticinvoke <oadd.com.google.common.util.concurrent.ClosingFuture: void closeQuietly(java.lang.AutoCloseable,java.util.concurrent.Executor)>(v, v);
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
java.util.concurrent.CountDownLatch whenClosedCountDown()
{
java.lang.Throwable v;
oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList v;
java.util.concurrent.CountDownLatch v, v, v, v;
boolean v, v, v;
v := @this: oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList;
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed>;
if v == 0 goto label;
v = new java.util.concurrent.CountDownLatch;
specialinvoke v.<java.util.concurrent.CountDownLatch: void <init>(int)>(0);
return v;
label:
entermonitor v;
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: boolean closed>;
if v == 0 goto label;
v = new java.util.concurrent.CountDownLatch;
specialinvoke v.<java.util.concurrent.CountDownLatch: void <init>(int)>(0);
exitmonitor v;
label:
return v;
label:
v = v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.util.concurrent.CountDownLatch whenClosed>;
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <oadd.com.google.common.base.Preconditions: void checkState(boolean)>(v);
v = new java.util.concurrent.CountDownLatch;
specialinvoke v.<java.util.concurrent.CountDownLatch: void <init>(int)>(1);
v.<oadd.com.google.common.util.concurrent.ClosingFuture$CloseableList: java.util.concurrent.CountDownLatch whenClosed> = v;
exitmonitor v;
label:
return v;
label:
v := @caughtexception;
exitmonitor v;
throw v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
}