Skip to content

Commit

Permalink
Merge pull request #10754 from som-snytt/backport/sd-867
Browse files Browse the repository at this point in the history
[backport] Console.isTerminal on JDK 22
  • Loading branch information
SethTisue committed Apr 15, 2024
2 parents c742dc3 + 7a27555 commit 616e32f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
2 changes: 2 additions & 0 deletions project/MimaFilters.scala
Expand Up @@ -32,6 +32,8 @@ object MimaFilters extends AutoPlugin {
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Predef#ArrayCharSequence.isEmpty"),
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.ArrayCharSequence.isEmpty"),

// private[scala] member used by Properties and by REPL
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.consoleIsTerminal"),
)

override val buildSettings = Seq(
Expand Down
14 changes: 11 additions & 3 deletions src/library/scala/util/Properties.scala
Expand Up @@ -158,9 +158,17 @@ private[scala] trait PropertiesTrait {
private[scala] def isAvian = javaVmName contains "Avian"

private[scala] def coloredOutputEnabled: Boolean = propOrElse("scala.color", "auto") match {
case "auto" => System.console() != null && !isWin
case a if a.toLowerCase() == "true" => true
case _ => false
case "auto" => !isWin && consoleIsTerminal
case s => "" == s || "true".equalsIgnoreCase(s)
}

/** System.console.isTerminal, or just check for null console on JDK < 22 */
private[scala] lazy val consoleIsTerminal: Boolean = {
val console = System.console
def isTerminal: Boolean =
try classOf[java.io.Console].getMethod("isTerminal", null).invoke(console).asInstanceOf[Boolean]
catch { case _: NoSuchMethodException => false }
console != null && (!isJavaAtLeast("22") || isTerminal)
}

// This is looking for javac, tools.jar, etc.
Expand Down
3 changes: 2 additions & 1 deletion src/repl/scala/tools/nsc/interpreter/ILoop.scala
Expand Up @@ -29,6 +29,7 @@ import io.AbstractFile
import scala.concurrent.{Await, Future}
import java.io.BufferedReader

import scala.util.Properties.consoleIsTerminal
import scala.util.{Try, Success, Failure}

import Completion._
Expand Down Expand Up @@ -905,7 +906,7 @@ class ILoop(in0: Option[BufferedReader], protected val out: JPrintWriter) extend
* supplied as a `() => Completion`; the Completion object provides a concrete Completer.
*/
def chooseReader(settings: Settings): InteractiveReader = {
if (settings.Xnojline) SimpleReader()
if (settings.Xnojline || !consoleIsTerminal) SimpleReader()
else {
type Completer = () => Completion
type ReaderMaker = Completer => InteractiveReader
Expand Down

0 comments on commit 616e32f

Please sign in to comment.