@@ -305,6 +305,12 @@ object Phases {
305305 */
306306 def isTyper = false
307307
308+ /** Can this transform create or delete non-private members? */
309+ def changesMembers : Boolean = false
310+
311+ /** Can this transform change the parents of a class? */
312+ def changesParents : Boolean = false
313+
308314 def exists : Boolean = true
309315
310316 private var myPeriod : Period = Periods .InvalidPeriod
@@ -315,6 +321,8 @@ object Phases {
315321 private var mySymbolicRefs = false
316322 private var myLabelsReordered = false
317323
324+ private var mySameMembersStartId = NoPhaseId
325+ private var mySameParentsStartId = NoPhaseId
318326
319327 /** The sequence position of this phase in the given context where 0
320328 * is reserved for NoPhase and the first real phase is at position 1.
@@ -332,6 +340,11 @@ object Phases {
332340 final def symbolicRefs = mySymbolicRefs // Phase is after ResolveSuper, newly generated TermRefs should be symbolic
333341 final def labelsReordered = myLabelsReordered // Phase is after LabelDefs, labels are flattened and owner chains don't mirror this
334342
343+ final def sameMembersStartId = mySameMembersStartId
344+ // id of first phase where all symbols are guaranteed to have the same members as in this phase
345+ final def sameParentsStartId = mySameParentsStartId
346+ // id of first phase where all symbols are guaranteed to have the same parents as in this phase
347+
335348 protected [Phases ] def init (base : ContextBase , start : Int , end: Int ): Unit = {
336349 if (start >= FirstPhaseId )
337350 assert(myPeriod == Periods .InvalidPeriod , s " phase $this has already been used once; cannot be reused " )
@@ -342,6 +355,8 @@ object Phases {
342355 myRefChecked = prev.getClass == classOf [RefChecks ] || prev.refChecked
343356 mySymbolicRefs = prev.getClass == classOf [ResolveSuper ] || prev.symbolicRefs
344357 myLabelsReordered = prev.getClass == classOf [LabelDefs ] || prev.labelsReordered
358+ mySameMembersStartId = if (changesMembers) id else prev.sameMembersStartId
359+ mySameParentsStartId = if (changesParents) id else prev.sameMembersStartId
345360 }
346361
347362 protected [Phases ] def init (base : ContextBase , id : Int ): Unit = init(base, id, id)
0 commit comments