Skip to content

Commit 8df0613

Browse files
committed
Generated MacroContext, to use blackbox macro context for Scala 2.12 and 2.13.
1 parent b819fd9 commit 8df0613

File tree

5 files changed

+95
-15
lines changed

5 files changed

+95
-15
lines changed

project/GenMacroContext.scala

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import java.io.File
2+
import java.io.BufferedWriter
3+
import java.io.FileWriter
4+
import scala.io.Source
5+
6+
object GenMacroContext {
7+
8+
private def writeFile(targetFile: File, content: String): File = {
9+
targetFile.getParentFile.mkdirs()
10+
val destWriter = new BufferedWriter(new FileWriter(targetFile))
11+
try {
12+
destWriter.write(content)
13+
targetFile
14+
}
15+
finally {
16+
destWriter.flush()
17+
destWriter.close()
18+
println("Generated " + targetFile.getAbsolutePath)
19+
}
20+
}
21+
22+
def genMain(targetDir: File, version: String, scalaVersion: String): Seq[File] = {
23+
val content =
24+
if (scalaVersion.startsWith("2.13") || scalaVersion.startsWith("2.12"))
25+
"""/*
26+
| * Copyright 2001-2019 Artima, Inc.
27+
| *
28+
| * Licensed under the Apache License, Version 2.0 (the "License");
29+
| * you may not use this file except in compliance with the License.
30+
| * You may obtain a copy of the License at
31+
| *
32+
| * http://www.apache.org/licenses/LICENSE-2.0
33+
| *
34+
| * Unless required by applicable law or agreed to in writing, software
35+
| * distributed under the License is distributed on an "AS IS" BASIS,
36+
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
37+
| * See the License for the specific language governing permissions and
38+
| * limitations under the License.
39+
| */
40+
|package org.scalactic
41+
|
42+
|private[scalactic] object MacroContext {
43+
|
44+
| type Context = scala.reflect.macros.blackbox.Context
45+
|
46+
|}
47+
|
48+
""".stripMargin
49+
else
50+
"""/*
51+
| * Copyright 2001-2019 Artima, Inc.
52+
| *
53+
| * Licensed under the Apache License, Version 2.0 (the "License");
54+
| * you may not use this file except in compliance with the License.
55+
| * You may obtain a copy of the License at
56+
| *
57+
| * http://www.apache.org/licenses/LICENSE-2.0
58+
| *
59+
| * Unless required by applicable law or agreed to in writing, software
60+
| * distributed under the License is distributed on an "AS IS" BASIS,
61+
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
62+
| * See the License for the specific language governing permissions and
63+
| * limitations under the License.
64+
| */
65+
|package org.scalactic
66+
|
67+
|private[scalactic] object MacroContext {
68+
|
69+
| type Context = scala.reflect.macros.Context
70+
|
71+
|}
72+
|
73+
""".stripMargin
74+
Seq(
75+
writeFile(new File(targetDir,"MacroContext.scala"), content)
76+
)
77+
}
78+
79+
80+
}

project/JsBuild.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ trait JsBuild { this: BuildCommons =>
3535
ScalacticGenResourcesJSVM.genResources((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
3636
GenAnyVals.genMain((sourceManaged in Compile).value / "org" / "scalactic" / "anyvals", version.value, scalaVersion.value, false) ++
3737
GenEvery.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
38-
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
38+
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
39+
GenMacroContext.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
3940
}.taskValue
4041
},
4142
// Disable publishing macros directly, included in scalactic main jar

project/NativeBuild.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ trait NativeBuild { this: BuildCommons =>
3535
sourceGenerators in Compile += {
3636
Def.task{
3737
GenScalacticNative.genMacroScala((sourceManaged in Compile).value / "scala", version.value, scalaVersion.value) ++
38-
ScalacticGenResourcesJSVM.genResources((sourceManaged in Compile).value / "scala" / "org" / "scalactic", version.value, scalaVersion.value) ++
39-
GenAnyVals.genMain((sourceManaged in Compile).value / "scala" / "org" / "scalactic" / "anyvals", version.value, scalaVersion.value, false) ++
40-
GenEvery.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
41-
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
38+
ScalacticGenResourcesJSVM.genResources((sourceManaged in Compile).value / "scala" / "org" / "scalactic", version.value, scalaVersion.value) ++
39+
GenAnyVals.genMain((sourceManaged in Compile).value / "scala" / "org" / "scalactic" / "anyvals", version.value, scalaVersion.value, false) ++
40+
GenEvery.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
41+
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
42+
GenMacroContext.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
4243
}.taskValue
4344
},
4445
// Disable publishing macros directly, included in scalactic main jar

project/scalatest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ object ScalatestBuild extends BuildCommons with DottyBuild with NativeBuild with
268268
ScalacticGenResourcesJVM.genResources((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
269269
GenAnyVals.genMain((sourceManaged in Compile).value / "org" / "scalactic" / "anyvals", version.value, scalaVersion.value, false) ++
270270
GenEvery.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
271-
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
271+
GenColCompatHelper.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value) ++
272+
GenMacroContext.genMain((sourceManaged in Compile).value / "org" / "scalactic", version.value, scalaVersion.value)
272273
}.taskValue
273274
},
274275
// Disable publishing macros directly, included in scalactic main jar

scalactic-macro/src/main/scala/org/scalactic/source/PositionMacro.scala

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.scalactic.source
22

3-
4-
//import scala.reflect.macros.blackbox.Context
5-
import scala.reflect.macros.Context
3+
import org.scalactic.MacroContext.Context
64
import org.scalactic.Resources
75

86
/**
@@ -14,17 +12,17 @@ object PositionMacro {
1412
}
1513
import sourceCompatHack._
1614

15+
private[scalactic] lazy val showScalacticFillFilePathnames: Boolean = {
16+
val value = System.getenv("SCALACTIC_FILL_FILE_PATHNAMES")
17+
value != null && value == "yes"
18+
}
19+
1720
private class PositionMacroImpl(val universe: scala.reflect.api.Universe) {
1821

1922
private val PositionModule = universe.rootMirror.staticModule("org.scalactic.source.Position")
2023
private val PositionClass = universe.rootMirror.staticClass("org.scalactic.source.Position")
2124
private val Position_apply = PositionModule.typeSignature.declaration(universe.newTermName("apply"))
2225

23-
private[scalactic] lazy val showScalacticFillFilePathnames: Boolean = {
24-
val value = System.getenv("SCALACTIC_FILL_FILE_PATHNAMES")
25-
value != null && value == "yes"
26-
}
27-
2826
def apply(context: Context): context.Tree = {
2927
import context.universe._
3028

@@ -50,7 +48,6 @@ object PositionMacro {
5048
val args = List(
5149
strLit(context.enclosingPosition.source.file.name),
5250
if (showScalacticFillFilePathnames) strLit(context.enclosingPosition.source.path) else strLit(Resources.pleaseDefineScalacticFillFilePathnameEnvVar),
53-
//strLit(""),
5451
intLit(context.enclosingPosition.line)
5552
)
5653

0 commit comments

Comments
 (0)