public final class org.eclipse.aether.named.support.FileLockNamedLock extends org.eclipse.aether.named.support.NamedLockSupport
{
private static final long RETRY_SLEEP_MILLIS;
private static final long LOCK_POSITION;
private static final long LOCK_SIZE;
private final java.util.Map threadSteps;
private final java.nio.channels.FileChannel fileChannel;
private final java.util.concurrent.atomic.AtomicReference fileLockRef;
private final java.util.concurrent.locks.ReentrantLock criticalRegion;
public void <init>(java.lang.String, java.nio.channels.FileChannel, org.eclipse.aether.named.support.NamedLockFactorySupport)
{
java.util.concurrent.locks.ReentrantLock v;
org.eclipse.aether.named.support.FileLockNamedLock v;
org.eclipse.aether.named.support.NamedLockFactorySupport v;
java.util.HashMap v;
java.lang.String v;
java.nio.channels.FileChannel v;
java.util.concurrent.atomic.AtomicReference v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v := @parameter: java.lang.String;
v := @parameter: java.nio.channels.FileChannel;
v := @parameter: org.eclipse.aether.named.support.NamedLockFactorySupport;
specialinvoke v.<org.eclipse.aether.named.support.NamedLockSupport: void <init>(java.lang.String,org.eclipse.aether.named.support.NamedLockFactorySupport)>(v, v);
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.Map threadSteps> = v;
v.<org.eclipse.aether.named.support.FileLockNamedLock: java.nio.channels.FileChannel fileChannel> = v;
v = new java.util.concurrent.atomic.AtomicReference;
specialinvoke v.<java.util.concurrent.atomic.AtomicReference: void <init>(java.lang.Object)>(null);
v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef> = v;
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion> = v;
return;
}
protected boolean doLockShared(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException
{
java.util.concurrent.TimeUnit v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.lang.Boolean v;
java.lang.Object v;
java.util.concurrent.Callable v;
long v;
boolean v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$doLockShared__34: java.util.concurrent.Callable bootstrap$(org.eclipse.aether.named.support.FileLockNamedLock)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = staticinvoke <org.eclipse.aether.named.support.Retry: java.lang.Object retry(long,java.util.concurrent.TimeUnit,long,java.util.concurrent.Callable,java.util.function.Predicate,java.lang.Object)>(v, v, 100L, v, null, v);
v = virtualinvoke v.<java.lang.Boolean: boolean booleanValue()>();
return v;
}
protected boolean doLockExclusively(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException
{
java.util.concurrent.TimeUnit v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.lang.Boolean v;
java.lang.Object v;
java.util.concurrent.Callable v;
long v;
boolean v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$doLockExclusively__35: java.util.concurrent.Callable bootstrap$(org.eclipse.aether.named.support.FileLockNamedLock)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = staticinvoke <org.eclipse.aether.named.support.Retry: java.lang.Object retry(long,java.util.concurrent.TimeUnit,long,java.util.concurrent.Callable,java.util.function.Predicate,java.lang.Object)>(v, v, 100L, v, null, v);
v = virtualinvoke v.<java.lang.Boolean: boolean booleanValue()>();
return v;
}
public java.lang.Boolean doLockShared()
{
java.lang.Throwable v;
java.util.concurrent.atomic.AtomicReference v, v;
java.util.function.Function v;
java.nio.channels.FileLock v;
java.lang.Thread v;
java.util.Map v;
java.lang.Boolean v, v, v, v, v, v, v;
boolean v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v, v, v, v, v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.lang.Object v, v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: boolean tryLock()>();
if v == 0 goto label;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.Map threadSteps>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$lambda_doLockShared_0__36: java.util.function.Function bootstrap$()>();
v = interfaceinvoke v.<java.util.Map: java.lang.Object computeIfAbsent(java.lang.Object,java.util.function.Function)>(v, v);
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object get()>();
if v == null goto label;
v = virtualinvoke v.<java.nio.channels.FileLock: boolean isShared()>();
if v == 0 goto label;
v = <java.lang.Boolean: java.lang.Boolean TRUE>;
interfaceinvoke v.<java.util.Deque: void push(java.lang.Object)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v = <java.lang.Boolean: java.lang.Boolean FALSE>;
v = interfaceinvoke v.<java.util.Deque: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
v = <java.lang.Boolean: java.lang.Boolean TRUE>;
interfaceinvoke v.<java.util.Deque: void push(java.lang.Object)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return null;
label:
v = specialinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: java.nio.channels.FileLock obtainFileLock(boolean)>(1);
if v == null goto label;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: void set(java.lang.Object)>(v);
v = <java.lang.Boolean: java.lang.Boolean TRUE>;
interfaceinvoke v.<java.util.Deque: void push(java.lang.Object)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return null;
catch java.lang.Throwable 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.Boolean doLockExclusively()
{
java.lang.Throwable v;
java.util.concurrent.atomic.AtomicReference v, v;
java.util.function.Function v;
java.nio.channels.FileLock v;
org.eclipse.aether.named.support.LockUpgradeNotSupportedException v;
java.lang.Thread v;
java.util.Map v;
java.lang.Boolean v, v, v, v, v, v;
boolean v, v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v, v, v, v, v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.lang.Object v, v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: boolean tryLock()>();
if v == 0 goto label;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.Map threadSteps>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$lambda_doLockExclusively_1__37: java.util.function.Function bootstrap$()>();
v = interfaceinvoke v.<java.util.Map: java.lang.Object computeIfAbsent(java.lang.Object,java.util.function.Function)>(v, v);
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object get()>();
if v == null goto label;
v = virtualinvoke v.<java.nio.channels.FileLock: boolean isShared()>();
if v == 0 goto label;
v = <java.lang.Boolean: java.lang.Boolean TRUE>;
v = interfaceinvoke v.<java.util.Deque: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
v = new org.eclipse.aether.named.support.LockUpgradeNotSupportedException;
specialinvoke v.<org.eclipse.aether.named.support.LockUpgradeNotSupportedException: void <init>(org.eclipse.aether.named.support.NamedLockSupport)>(v);
throw v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return null;
label:
v = <java.lang.Boolean: java.lang.Boolean FALSE>;
v = interfaceinvoke v.<java.util.Deque: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
v = <java.lang.Boolean: java.lang.Boolean FALSE>;
interfaceinvoke v.<java.util.Deque: void push(java.lang.Object)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return null;
label:
v = specialinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: java.nio.channels.FileLock obtainFileLock(boolean)>(0);
if v == null goto label;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: void set(java.lang.Object)>(v);
v = <java.lang.Boolean: java.lang.Boolean FALSE>;
interfaceinvoke v.<java.util.Deque: void push(java.lang.Object)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return null;
catch java.lang.Throwable 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;
}
protected void doUnlock()
{
java.lang.Throwable v;
java.lang.IllegalStateException v;
java.util.concurrent.atomic.AtomicReference v;
java.util.function.Function v;
java.lang.Thread v;
java.util.Map v;
boolean v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.io.IOException v;
java.io.UncheckedIOException v;
java.lang.Object v, v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.Map threadSteps>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$lambda_doUnlock_2__38: java.util.function.Function bootstrap$()>();
v = interfaceinvoke v.<java.util.Map: java.lang.Object computeIfAbsent(java.lang.Object,java.util.function.Function)>(v, v);
v = interfaceinvoke v.<java.util.Deque: boolean isEmpty()>();
if v == 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("Wrong API usage: unlock without lock");
throw v;
label:
interfaceinvoke v.<java.util.Deque: java.lang.Object pop()>();
v = interfaceinvoke v.<java.util.Deque: boolean isEmpty()>();
if v == 0 goto label;
v = specialinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: boolean anyOtherThreadHasSteps()>();
if v != 0 goto label;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.atomic.AtomicReference fileLockRef>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object getAndSet(java.lang.Object)>(null);
virtualinvoke v.<java.nio.channels.FileLock: void release()>();
label:
goto label;
label:
v := @caughtexception;
v = new java.io.UncheckedIOException;
specialinvoke v.<java.io.UncheckedIOException: void <init>(java.io.IOException)>(v);
throw v;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.concurrent.locks.ReentrantLock criticalRegion>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return;
catch java.io.IOException from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private boolean anyOtherThreadHasSteps()
{
java.util.function.Predicate v, v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.util.Set v;
java.util.function.Function v;
java.util.stream.Stream v, v, v;
java.util.Map v;
boolean v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.util.Map threadSteps>;
v = interfaceinvoke v.<java.util.Map: java.util.Set entrySet()>();
v = interfaceinvoke v.<java.util.Set: java.util.stream.Stream stream()>();
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$lambda_anyOtherThreadHasSteps_3__39: java.util.function.Predicate bootstrap$()>();
v = interfaceinvoke v.<java.util.stream.Stream: java.util.stream.Stream filter(java.util.function.Predicate)>(v);
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$getValue__40: java.util.function.Function bootstrap$()>();
v = interfaceinvoke v.<java.util.stream.Stream: java.util.stream.Stream map(java.util.function.Function)>(v);
v = staticinvoke <org.eclipse.aether.named.support.FileLockNamedLock$lambda_anyOtherThreadHasSteps_4__41: java.util.function.Predicate bootstrap$()>();
v = interfaceinvoke v.<java.util.stream.Stream: boolean anyMatch(java.util.function.Predicate)>(v);
return v;
}
private java.nio.channels.FileLock obtainFileLock(boolean)
{
java.nio.channels.OverlappingFileLockException v;
org.slf4j.Logger v, v;
org.eclipse.aether.named.support.FileLockNamedLock v;
java.io.IOException v;
java.nio.channels.FileLock v;
java.io.UncheckedIOException v;
java.lang.String v, v, v, v;
java.nio.channels.FileChannel v;
boolean v;
v := @this: org.eclipse.aether.named.support.FileLockNamedLock;
v := @parameter: boolean;
label:
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: java.nio.channels.FileChannel fileChannel>;
v = virtualinvoke v.<java.nio.channels.FileChannel: java.nio.channels.FileLock tryLock(long,long,boolean)>(0L, 1L, v);
label:
goto label;
label:
v := @caughtexception;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: org.slf4j.Logger logger>;
v = virtualinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: java.lang.String name()>();
interfaceinvoke v.<org.slf4j.Logger: void trace(java.lang.String,java.lang.Object,java.lang.Object)>("File lock overlap on \'{}\'", v, v);
return null;
label:
v := @caughtexception;
v = v.<org.eclipse.aether.named.support.FileLockNamedLock: org.slf4j.Logger logger>;
v = virtualinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: java.lang.String name()>();
interfaceinvoke v.<org.slf4j.Logger: void trace(java.lang.String,java.lang.Object,java.lang.Object)>("Failure on acquire of file lock for \'{}\'", v, v);
v = new java.io.UncheckedIOException;
v = virtualinvoke v.<org.eclipse.aether.named.support.FileLockNamedLock: java.lang.String name()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(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[])>("Failed to acquire lock file channel for \'\u0001\'");
specialinvoke v.<java.io.UncheckedIOException: void <init>(java.lang.String,java.io.IOException)>(v, v);
throw v;
label:
return v;
catch java.nio.channels.OverlappingFileLockException from label to label with label;
catch java.io.IOException from label to label with label;
}
}