From 52d19d8f0c72cae52ccdf31ca90ffa84775164b2 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Sun, 21 Jun 2020 16:58:23 -0700 Subject: [PATCH] Refactor Signal for graalvm The graalvm issues warnings about the objects defined in Signal.register, so I made them top level private classes instead. --- .../main/scala/sbt/internal/util/Signal.scala | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala index c8188e9ac..b0e862410 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala @@ -7,6 +7,8 @@ package sbt.internal.util +import sun.misc.{ Signal, SignalHandler } + object Signals { val CONT = "CONT" val INT = "INT" @@ -36,24 +38,14 @@ object Signals { def register(handler: () => Unit, signal: String = INT): Registration = // TODO - Maybe we can just ignore things if not is-supported. if (supported(signal)) { - import sun.misc.{ Signal, SignalHandler } val intSignal = new Signal(signal) val newHandler = new SignalHandler { def handle(sig: Signal): Unit = { handler() } } val oldHandler = Signal.handle(intSignal, newHandler) - object unregisterNewHandler extends Registration { - override def remove(): Unit = { - Signal.handle(intSignal, oldHandler) - () - } - } - unregisterNewHandler + new UnregisterNewHandler(intSignal, oldHandler) } else { // TODO - Maybe we should just throw an exception if we don't support signals... - object NullUnregisterNewHandler extends Registration { - override def remove(): Unit = () - } NullUnregisterNewHandler } @@ -64,6 +56,17 @@ object Signals { } catch { case _: LinkageError => false } } +private class UnregisterNewHandler(intSignal: Signal, oldHandler: SignalHandler) + extends Signals.Registration { + override def remove(): Unit = { + Signal.handle(intSignal, oldHandler) + () + } +} +private object NullUnregisterNewHandler extends Signals.Registration { + override def remove(): Unit = () +} + // Must only be referenced using a // try { } catch { case _: LinkageError => ... } // block to