@@ -13,19 +13,34 @@ import dotty.tools.io.PlainFile.toPlainFile
13
13
import dotty .tools .xsbt .CompilerBridge
14
14
15
15
import TestCallback .ExtractedClassDependencies
16
+ import ScalaCompilerForUnitTesting .Callbacks
17
+
18
+ object ScalaCompilerForUnitTesting :
19
+ case class Callbacks (analysis : TestCallback , progress : TestCompileProgress )
16
20
17
21
/**
18
22
* Provides common functionality needed for unit tests that require compiling
19
23
* source code using Scala compiler.
20
24
*/
21
25
class ScalaCompilerForUnitTesting {
22
26
27
+ def extractEnteredPhases (srcs : String * ): Seq [List [String ]] = {
28
+ val (tempSrcFiles, Callbacks (_, testProgress)) = compileSrcs(srcs : _* )
29
+ val run = testProgress.runs.head
30
+ tempSrcFiles.map(src => run.unitPhases(src.id))
31
+ }
32
+
33
+ def extractProgressPhases (srcs : String * ): List [String ] = {
34
+ val (_, Callbacks (_, testProgress)) = compileSrcs(srcs : _* )
35
+ testProgress.runs.head.phases
36
+ }
37
+
23
38
/**
24
39
* Compiles given source code using Scala compiler and returns API representation
25
40
* extracted by ExtractAPI class.
26
41
*/
27
42
def extractApiFromSrc (src : String ): Seq [ClassLike ] = {
28
- val (Seq (tempSrcFile), analysisCallback) = compileSrcs(src)
43
+ val (Seq (tempSrcFile), Callbacks ( analysisCallback, _) ) = compileSrcs(src)
29
44
analysisCallback.apis(tempSrcFile)
30
45
}
31
46
@@ -34,7 +49,7 @@ class ScalaCompilerForUnitTesting {
34
49
* extracted by ExtractAPI class.
35
50
*/
36
51
def extractApisFromSrcs (srcs : List [String ]* ): Seq [Seq [ClassLike ]] = {
37
- val (tempSrcFiles, analysisCallback) = compileSrcs(srcs.toList)
52
+ val (tempSrcFiles, Callbacks ( analysisCallback, _) ) = compileSrcs(srcs.toList)
38
53
tempSrcFiles.map(analysisCallback.apis)
39
54
}
40
55
@@ -52,7 +67,7 @@ class ScalaCompilerForUnitTesting {
52
67
assertDefaultScope : Boolean = true
53
68
): Map [String , Set [String ]] = {
54
69
// we drop temp src file corresponding to the definition src file
55
- val (Seq (_, tempSrcFile), analysisCallback) = compileSrcs(definitionSrc, actualSrc)
70
+ val (Seq (_, tempSrcFile), Callbacks ( analysisCallback, _) ) = compileSrcs(definitionSrc, actualSrc)
56
71
57
72
if (assertDefaultScope) for {
58
73
(className, used) <- analysisCallback.usedNamesAndScopes
@@ -70,7 +85,7 @@ class ScalaCompilerForUnitTesting {
70
85
* Only the names used in the last src file are returned.
71
86
*/
72
87
def extractUsedNamesFromSrc (sources : String * ): Map [String , Set [String ]] = {
73
- val (srcFiles, analysisCallback) = compileSrcs(sources : _* )
88
+ val (srcFiles, Callbacks ( analysisCallback, _) ) = compileSrcs(sources : _* )
74
89
srcFiles
75
90
.map { srcFile =>
76
91
val classesInSrc = analysisCallback.classNames(srcFile).map(_._1)
@@ -92,7 +107,7 @@ class ScalaCompilerForUnitTesting {
92
107
* file system-independent way of testing dependencies between source code "files".
93
108
*/
94
109
def extractDependenciesFromSrcs (srcs : List [List [String ]]): ExtractedClassDependencies = {
95
- val (_, testCallback) = compileSrcs(srcs)
110
+ val (_, Callbacks ( testCallback, _) ) = compileSrcs(srcs)
96
111
97
112
val memberRefDeps = testCallback.classDependencies collect {
98
113
case (target, src, DependencyByMemberRef ) => (src, target)
@@ -121,7 +136,7 @@ class ScalaCompilerForUnitTesting {
121
136
* The sequence of temporary files corresponding to passed snippets and analysis
122
137
* callback is returned as a result.
123
138
*/
124
- def compileSrcs (groupedSrcs : List [List [String ]]): (Seq [VirtualFile ], TestCallback ) = {
139
+ def compileSrcs (groupedSrcs : List [List [String ]]): (Seq [VirtualFile ], Callbacks ) = {
125
140
val temp = IO .createTemporaryDirectory
126
141
val analysisCallback = new TestCallback
127
142
val testProgress = new TestCompileProgress
@@ -130,8 +145,8 @@ class ScalaCompilerForUnitTesting {
130
145
131
146
val bridge = new CompilerBridge
132
147
133
- val files = for ((compilationUnit , unitId) <- groupedSrcs.zipWithIndex) yield {
134
- val srcFiles = compilationUnit .toSeq.zipWithIndex.map {
148
+ val files = for ((compilationUnits , unitId) <- groupedSrcs.zipWithIndex) yield {
149
+ val srcFiles = compilationUnits .toSeq.zipWithIndex.map {
135
150
(src, i) =>
136
151
val fileName = s " Test- $unitId- $i.scala "
137
152
prepareSrcFile(temp, fileName, src)
@@ -153,12 +168,14 @@ class ScalaCompilerForUnitTesting {
153
168
new TestLogger
154
169
)
155
170
171
+ testProgress.completeRun()
172
+
156
173
srcFiles
157
174
}
158
- (files.flatten.toSeq, analysisCallback)
175
+ (files.flatten.toSeq, Callbacks ( analysisCallback, testProgress) )
159
176
}
160
177
161
- def compileSrcs (srcs : String * ): (Seq [VirtualFile ], TestCallback ) = {
178
+ def compileSrcs (srcs : String * ): (Seq [VirtualFile ], Callbacks ) = {
162
179
compileSrcs(List (srcs.toList))
163
180
}
164
181
0 commit comments