mirror of https://github.com/sbt/sbt.git
24 lines
1.1 KiB
Scala
24 lines
1.1 KiB
Scala
|
|
package xsbt.boot
|
||
|
|
|
||
|
|
import Pre._
|
||
|
|
|
||
|
|
object JAnsi
|
||
|
|
{
|
||
|
|
def uninstall(loader: ClassLoader): Unit = callJAnsi("systemUninstall", loader)
|
||
|
|
def install(loader: ClassLoader): Unit = callJAnsi("systemInstall", loader)
|
||
|
|
|
||
|
|
private[this] def callJAnsi(methodName: String, loader: ClassLoader): Unit = if(isWindows && !isCygwin) callJAnsiMethod(methodName, loader)
|
||
|
|
private[this] def callJAnsiMethod(methodName: String, loader: ClassLoader): Unit =
|
||
|
|
try {
|
||
|
|
val c = Class.forName("org.fusesource.jansi.AnsiConsole", true, loader)
|
||
|
|
c.getMethod(methodName).invoke(null)
|
||
|
|
} catch {
|
||
|
|
case ignore: ClassNotFoundException =>
|
||
|
|
/* The below code intentionally traps everything. It technically shouldn't trap the
|
||
|
|
* non-StackOverflowError VirtualMachineErrors and AWTError would be weird, but this is PermGen
|
||
|
|
* mitigation code that should not render sbt completely unusable if jansi initialization fails.
|
||
|
|
* [From Mark Harrah, https://github.com/sbt/sbt/pull/633#issuecomment-11957578].
|
||
|
|
*/
|
||
|
|
case ex: Throwable => println("Jansi found on class path but initialization failed: " + ex)
|
||
|
|
}
|
||
|
|
}
|