@@ -5,6 +5,7 @@ import org.junit.Test
5
5
import dotty .tools .dotc ._
6
6
import plugins ._
7
7
import transform .MegaPhase .MiniPhase
8
+ import core .Phases .Phase
8
9
9
10
class PluginsTest {
10
11
class TestPhase extends PluginPhase { def phaseName = this .getClass.getName }
@@ -38,6 +39,10 @@ class PluginsTest {
38
39
39
40
def classOfPhase (p : PluginPhase ): Class [_ <: PluginPhase ] = p.getClass.asInstanceOf [Class [_ <: PluginPhase ]]
40
41
42
+ def debugPlan (plan : List [List [Phase ]]): Unit = {
43
+ println(plan.mkString(" plan:\n - " , " \n - " , " " ))
44
+ }
45
+
41
46
@ Test
42
47
def insertAfter = {
43
48
object M1 extends TestPhase {
@@ -172,6 +177,34 @@ class PluginsTest {
172
177
assert(updatedPlan2(5 )(0 ) eq M2 )
173
178
}
174
179
180
+ @ Test
181
+ def orderingTransitive = {
182
+ object M1 extends TestPhase {
183
+ override val runsAfter = Set (classOf [P3d ])
184
+ override val runsBefore = Set (classOfPhase(M2 ), classOf [P7 ])
185
+ }
186
+ object M2 extends TestPhase {
187
+ override val runsAfter = Set (classOf [P3d ])
188
+ override val runsBefore = Set (classOf [P5 ], classOf [P8 ])
189
+ }
190
+ object M3 extends TestPhase {
191
+ override val runsAfter = Set (classOfPhase(M2 ), classOf [P2 ])
192
+ override val runsBefore = Set (classOf [P4 ], classOf [P8 ])
193
+ }
194
+
195
+ // M1 inserted to plan first
196
+ val updatedPlan1 = Plugins .schedule(basicPlan, M1 :: M2 :: M3 :: Nil )
197
+ assert(updatedPlan1(3 )(0 ) eq M1 )
198
+ assert(updatedPlan1(4 )(0 ) eq M2 )
199
+ assert(updatedPlan1(5 )(0 ) eq M3 )
200
+
201
+ // M2 inserted to plan first
202
+ val updatedPlan2 = Plugins .schedule(basicPlan, M2 :: M1 :: M3 :: Nil )
203
+ assert(updatedPlan1(3 )(0 ) eq M1 )
204
+ assert(updatedPlan1(4 )(0 ) eq M2 )
205
+ assert(updatedPlan1(5 )(0 ) eq M3 )
206
+ }
207
+
175
208
176
209
@ Test
177
210
def deterministic = {
0 commit comments