@@ -13,19 +13,34 @@ import dotty.tools.io.PlainFile.toPlainFile
1313import dotty .tools .xsbt .CompilerBridge
1414
1515import TestCallback .ExtractedClassDependencies
16+ import ScalaCompilerForUnitTesting .Callbacks
17+
18+ object ScalaCompilerForUnitTesting :
19+ case class Callbacks (analysis : TestCallback , progress : TestCompileProgress )
1620
1721/**
1822 * Provides common functionality needed for unit tests that require compiling
1923 * source code using Scala compiler.
2024 */
2125class ScalaCompilerForUnitTesting {
2226
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+
2338 /**
2439 * Compiles given source code using Scala compiler and returns API representation
2540 * extracted by ExtractAPI class.
2641 */
2742 def extractApiFromSrc (src : String ): Seq [ClassLike ] = {
28- val (Seq (tempSrcFile), analysisCallback) = compileSrcs(src)
43+ val (Seq (tempSrcFile), Callbacks ( analysisCallback, _) ) = compileSrcs(src)
2944 analysisCallback.apis(tempSrcFile)
3045 }
3146
@@ -34,7 +49,7 @@ class ScalaCompilerForUnitTesting {
3449 * extracted by ExtractAPI class.
3550 */
3651 def extractApisFromSrcs (srcs : List [String ]* ): Seq [Seq [ClassLike ]] = {
37- val (tempSrcFiles, analysisCallback) = compileSrcs(srcs.toList)
52+ val (tempSrcFiles, Callbacks ( analysisCallback, _) ) = compileSrcs(srcs.toList)
3853 tempSrcFiles.map(analysisCallback.apis)
3954 }
4055
@@ -52,7 +67,7 @@ class ScalaCompilerForUnitTesting {
5267 assertDefaultScope : Boolean = true
5368 ): Map [String , Set [String ]] = {
5469 // 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)
5671
5772 if (assertDefaultScope) for {
5873 (className, used) <- analysisCallback.usedNamesAndScopes
@@ -70,7 +85,7 @@ class ScalaCompilerForUnitTesting {
7085 * Only the names used in the last src file are returned.
7186 */
7287 def extractUsedNamesFromSrc (sources : String * ): Map [String , Set [String ]] = {
73- val (srcFiles, analysisCallback) = compileSrcs(sources : _* )
88+ val (srcFiles, Callbacks ( analysisCallback, _) ) = compileSrcs(sources : _* )
7489 srcFiles
7590 .map { srcFile =>
7691 val classesInSrc = analysisCallback.classNames(srcFile).map(_._1)
@@ -92,7 +107,7 @@ class ScalaCompilerForUnitTesting {
92107 * file system-independent way of testing dependencies between source code "files".
93108 */
94109 def extractDependenciesFromSrcs (srcs : List [List [String ]]): ExtractedClassDependencies = {
95- val (_, testCallback) = compileSrcs(srcs)
110+ val (_, Callbacks ( testCallback, _) ) = compileSrcs(srcs)
96111
97112 val memberRefDeps = testCallback.classDependencies collect {
98113 case (target, src, DependencyByMemberRef ) => (src, target)
@@ -121,7 +136,7 @@ class ScalaCompilerForUnitTesting {
121136 * The sequence of temporary files corresponding to passed snippets and analysis
122137 * callback is returned as a result.
123138 */
124- def compileSrcs (groupedSrcs : List [List [String ]]): (Seq [VirtualFile ], TestCallback ) = {
139+ def compileSrcs (groupedSrcs : List [List [String ]]): (Seq [VirtualFile ], Callbacks ) = {
125140 val temp = IO .createTemporaryDirectory
126141 val analysisCallback = new TestCallback
127142 val testProgress = new TestCompileProgress
@@ -130,8 +145,8 @@ class ScalaCompilerForUnitTesting {
130145
131146 val bridge = new CompilerBridge
132147
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 {
135150 (src, i) =>
136151 val fileName = s " Test- $unitId- $i.scala "
137152 prepareSrcFile(temp, fileName, src)
@@ -153,12 +168,14 @@ class ScalaCompilerForUnitTesting {
153168 new TestLogger
154169 )
155170
171+ testProgress.completeRun()
172+
156173 srcFiles
157174 }
158- (files.flatten.toSeq, analysisCallback)
175+ (files.flatten.toSeq, Callbacks ( analysisCallback, testProgress) )
159176 }
160177
161- def compileSrcs (srcs : String * ): (Seq [VirtualFile ], TestCallback ) = {
178+ def compileSrcs (srcs : String * ): (Seq [VirtualFile ], Callbacks ) = {
162179 compileSrcs(List (srcs.toList))
163180 }
164181
0 commit comments