@@ -13,6 +13,8 @@ package dotty.tools
13
13
*/
14
14
15
15
object GenerateFunctionConverters {
16
+ import scala .tools .nsc ._
17
+
16
18
case class Artifact (name : String , content : String )
17
19
18
20
val copyright =
@@ -33,7 +35,6 @@ object GenerateFunctionConverters {
33
35
34
36
val packaging = " package scala.jdk"
35
37
36
- import scala .tools .nsc ._
37
38
val settings = new Settings (msg => sys.error(msg))
38
39
def us (cl : ClassLoader ): List [String ] = cl match {
39
40
case ucl : java.net.URLClassLoader => ucl.getURLs.map(u => new java.io.File (u.toURI).getAbsolutePath).toList ::: us(ucl.getParent)
@@ -44,6 +45,7 @@ object GenerateFunctionConverters {
44
45
val run = new compiler.Run
45
46
46
47
import compiler ._ , definitions ._
48
+
47
49
locally {
48
50
// make sure `java.lang.Double` prints as `java.lang.Double`, not just `Double` (which resolves to `scala.Double`)
49
51
val f = classOf [scala.reflect.internal.Definitions # DefinitionsClass ].getDeclaredField(" UnqualifiedOwners" )
@@ -65,43 +67,50 @@ object GenerateFunctionConverters {
65
67
}
66
68
67
69
implicit class IndentMe (v : Vector [String ]) {
70
+ /** Adds indentation to every line in the vector. */
68
71
def indent : Vector [String ] = v.map(" " + _)
69
72
}
70
73
71
- implicit class FlattenMe (v : Vector [Vector [String ]]) {
72
- def mkVec ( join : String = " " ) : Vector [ String ] = {
73
- val vb = Vector .newBuilder [String ]
74
+ implicit class WriteToBuilder (v : Vector [Vector [String ]]) {
75
+ /** Writes the vector into a builder, with `join` inserted between each group. */
76
+ def writeTo ( builder : collection.mutable. Builder [ String , Vector [String ]], join : String = " " ) = {
74
77
var first = true
75
- v.foreach{ vi =>
76
- if (! first) vb += join
78
+ for ( vi <- v) {
79
+ if (! first) builder += join
77
80
first = false
78
- vb ++= vi
81
+ builder ++= vi
79
82
}
83
+ }
84
+ }
85
+
86
+ implicit class FlattenMe (v : Vector [Vector [String ]]) {
87
+ /** Joins the given `Vector[Vector[String]]`, with `join` inserted in between. */
88
+ def mkVec (join : String = " " ): Vector [String ] = {
89
+ val vb = Vector .newBuilder[String ]
90
+ v.writeTo(vb)
80
91
vb.result()
81
92
}
82
93
}
83
94
84
95
implicit class DoubleFlattenMe (v : Vector [Vector [Vector [String ]]]) {
96
+ /** Like `mkVec`, but done twice, with `join` inserted twice between outer blocks. */
85
97
def mkVecVec (join : String = " " ): Vector [String ] = {
86
98
val vb = Vector .newBuilder[String ]
87
99
var first = true
88
- v.foreach{ vi =>
100
+ for ( vi <- v) {
89
101
if (! first) { vb += join; vb += join }
90
102
first = false
91
- var ifirst = true
92
- vi.foreach{ vj =>
93
- if (! ifirst) vb += join
94
- ifirst = false
95
- vb ++= vj
96
- }
103
+ vi.writeTo(vb, join)
97
104
}
98
105
vb.result()
99
106
}
100
107
}
101
108
102
- implicit class SplitMyLinesAndStuff (s : String ) {
109
+ implicit class StringExtensions (s : String ) {
103
110
// work around scala/bug#11125
111
+ /** Splits the string into a `Vector` of lines. */
104
112
def toVec = Predef .augmentString(s).lines.toVector
113
+ /** Is the string a blank line? */
105
114
def nonBlank = s.trim.length > 0
106
115
}
107
116
0 commit comments