@@ -6,7 +6,7 @@ import sbt.{ Def, _ }
66import sbt .Keys ._
77import sbt .plugins .CorePlugin
88import sbt .internal ._
9- import sbt .internal .util .MainAppender . _
9+ import sbt .internal .util .MainAppender
1010import sbt .internal .util .ConsoleAppender
1111
1212import scala .util .matching .Regex
@@ -84,10 +84,30 @@ object HyperlinkPlugin extends AutoPlugin {
8484 hyperlinkRegex := Default .regex(baseDirectory.value),
8585 hyperlinkAction := FileAction ,
8686 logManager := {
87- LogManager .withScreenLogger {
87+ // we use internal sbt APIs, which are incompatible between < 1.4 and >= 1.4
88+ // see https://github.com/sbt/sbt/issues/5931 and https://github.com/sbt/sbt/pull/5731
89+ // work-around using reflection
90+ import scala .reflect .runtime .{ universe => ru }
91+
92+ val mirror = ru.runtimeMirror(getClass.getClassLoader)
93+ val mainAppenderType = mirror.typeOf[MainAppender .type ]
94+ val mainAppenderModuleSymbol = mainAppenderType.termSymbol.asModule
95+ val mainAppender = mirror.reflect(mirror.reflectModule(mainAppenderModuleSymbol).instance)
96+ val defaultScreenMethodSymbol =
97+ mainAppenderType.decl(ru.TermName (" defaultScreen" )).asTerm.alternatives.collectFirst {
98+ case m if m.asMethod.paramLists.foldLeft(0 )(_ + _.size) == 1 => m.asMethod
99+ }
100+ val defaultScreen = mainAppender.reflectMethod(defaultScreenMethodSymbol.get)
101+
102+ val logManagerType = mirror.typeOf[LogManager .type ]
103+ val logManagerModuleSymbol = logManagerType.termSymbol.asModule
104+ val logManager = mirror.reflect(mirror.reflectModule(logManagerModuleSymbol).instance)
105+ val withScreenLoggerMethodSymbol = logManagerType.decl(ru.TermName (" withScreenLogger" )).asMethod
106+ val withScreenLogger = logManager.reflectMethod(withScreenLoggerMethodSymbol)
107+
108+ withScreenLogger({
88109 (_ : ScopedKey [_], state : State ) ⇒
89110 val extracted = Project .extract(state)
90- val basedir = extracted.get(baseDirectory)
91111 val action : HyperlinkAction = extracted.get(hyperlinkAction)
92112 val regex : Regex = extracted.get(hyperlinkRegex)
93113
@@ -100,7 +120,7 @@ object HyperlinkPlugin extends AutoPlugin {
100120
101121 override def print (s : String ): Unit = super .print(filter(s))
102122 }))
103- }
123+ }). asInstanceOf [ LogManager ]
104124 }
105125 )
106126}
0 commit comments