Skip to content

Commit b2f5a37

Browse files
authored
Merge pull request #9 from avdv/sbt-1.4-compat
Support sbt version >= 1.4
2 parents c30cf11 + 57e957f commit b2f5a37

4 files changed

Lines changed: 27 additions & 7 deletions

File tree

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ enablePlugins(SbtPlugin)
88
scalaVersion in ThisBuild := "2.12.8"
99

1010
// utest
11-
libraryDependencies += "com.lihaoyi" %% "utest" % "0.7.4" % Test
11+
libraryDependencies += "com.lihaoyi" %% "utest" % "0.7.5" % Test
1212
testFrameworks += new TestFramework("utest.runner.Framework")
1313

1414
bintrayPackageLabels := Seq("sbt","plugin")

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.2.7
1+
sbt.version=1.2.8

project/plugins.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.4")
2+
addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.6")
33

44
addSbtPlugin("com.dwijnand" % "sbt-dynver" % "3.0.0")
55

src/main/scala/sbthyperlink/HyperlinkPlugin.scala

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import sbt.{ Def, _ }
66
import sbt.Keys._
77
import sbt.plugins.CorePlugin
88
import sbt.internal._
9-
import sbt.internal.util.MainAppender._
9+
import sbt.internal.util.MainAppender
1010
import sbt.internal.util.ConsoleAppender
1111

1212
import 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

Comments
 (0)