Add public method to get no-op global lock

This commit is contained in:
jvican 2017-05-20 01:56:34 +02:00
parent 025c4cef9a
commit aa3527996f
1 changed files with 39 additions and 0 deletions

View File

@ -12,6 +12,7 @@ import xsbti.Logger;
import xsbti.compile.CompilerBridgeProvider;
import java.io.File;
import java.util.concurrent.Callable;
public final class ZincBridgeProvider {
/**
@ -46,6 +47,44 @@ public final class ZincBridgeProvider {
return ZincComponentCompiler$.MODULE$.getDefaultConfiguration(baseDirectory, ivyHome, resolvers, logger);
}
/**
* Cast a CheckedException as an unchecked one.
*
* @param throwable to cast
* @param <T> the type of the Throwable
* @return this method will never return a Throwable instance, it will just throw it.
* @throws T the throwable as an unchecked throwable
*/
@SuppressWarnings("unchecked")
private static <T extends Throwable> RuntimeException rethrow(Throwable throwable) throws T {
throw (T) throwable; // rely on vacuous cast
}
/**
* Defines a global lock that does nothing but calling the callable to synchronize
* across threads. The lock file is used to resolve and download dependencies via ivy.
* <p>
* This operation is necesary to invoke {@link ZincBridgeProvider#getProvider(File, GlobalLock, ComponentProvider, IvyConfiguration, Logger)}.
*
* @return A default global lock.
*/
public static GlobalLock getDefaultLock() {
return new GlobalLock() {
@Override
public <T> T apply(File lockFile, Callable<T> run) {
T value = null;
try {
value = run.call();
} catch (Exception e) {
// Rethrow runtime exception because apply does not define throwing Exception
rethrow(e);
}
return value;
}
};
}
/**
* Get a compiler bridge provider that allows the user to fetch Scala and a compiled bridge.
*