@@ -26,6 +26,43 @@ private[repl] class Rendering(parentClassLoader: Option[ClassLoader] = None):
26
26
27
27
var myClassLoader : AbstractFileClassLoader = uninitialized
28
28
29
+ private def pprintRender (value : Any , width : Int , height : Int , initialOffset : Int )(using Context ): String = {
30
+ def fallback () =
31
+ dotty.shaded.pprint.PPrinter .BlackWhite
32
+ .apply(
33
+ value,
34
+ width = width,
35
+ height = height,
36
+ initialOffset = initialOffset
37
+ )
38
+ .plainText
39
+ dotty.shaded.pprint.PPrinter .BlackWhite .apply(
40
+ value, width = width, height = height, initialOffset = initialOffset
41
+ ).plainText
42
+ try
43
+ val cl = classLoader()
44
+ val pprintCls = Class .forName(" dotty.shaded.pprint.PPrinter$BlackWhite$" , false , cl)
45
+ val fansiStrCls = Class .forName(" dotty.shaded.fansi.Str" , false , cl)
46
+ val BlackWhite = pprintCls.getField(" MODULE$" ).get(null )
47
+ val BlackWhite_apply = pprintCls.getMethod(" apply" ,
48
+ classOf [Any ], // value
49
+ classOf [Int ], // width
50
+ classOf [Int ], // height
51
+ classOf [Int ], // indentation
52
+ classOf [Int ], // initialOffset
53
+ classOf [Boolean ], // escape Unicode
54
+ classOf [Boolean ], // show field names
55
+ )
56
+ val FansiStr_plainText = fansiStrCls.getMethod(" plainText" )
57
+ val fansiStr = BlackWhite_apply .invoke(
58
+ BlackWhite , value, width, height, 2 , initialOffset, false , true
59
+ )
60
+ FansiStr_plainText .invoke(fansiStr).asInstanceOf [String ]
61
+ catch
62
+ case _ : ClassNotFoundException => fallback()
63
+ case _ : NoSuchMethodException => fallback()
64
+ }
65
+
29
66
30
67
/** Class loader used to load compiled code */
31
68
private [repl] def classLoader ()(using Context ) =
@@ -55,14 +92,12 @@ private[repl] class Rendering(parentClassLoader: Option[ClassLoader] = None):
55
92
/** Return a String representation of a value we got from `classLoader()`. */
56
93
private [repl] def replStringOf (value : Object , prefixLength : Int )(using Context ): String = {
57
94
// pretty-print things with 100 cols 50 rows by default,
58
- dotty.shaded.pprint.PPrinter .BlackWhite
59
- .apply(
60
- value,
61
- width = 100 ,
62
- height = 50 ,
63
- initialOffset = prefixLength
64
- )
65
- .plainText
95
+ pprintRender(
96
+ value,
97
+ width = 100 ,
98
+ height = 50 ,
99
+ initialOffset = prefixLength
100
+ )
66
101
}
67
102
68
103
/** Load the value of the symbol using reflection.
0 commit comments