File tree Expand file tree Collapse file tree 4 files changed +24
-12
lines changed
src/reflect/scala/reflect Expand file tree Collapse file tree 4 files changed +24
-12
lines changed Original file line number Diff line number Diff line change @@ -1207,15 +1207,21 @@ trait Definitions extends api.StandardDefinitions {
12071207 }
12081208 def getMemberMethod (owner : Symbol , name : Name ): TermSymbol = {
12091209 getMember(owner, name.toTermName) match {
1210- // todo. member symbol becomes a term symbol in cleanup. is this a bug?
1211- // case x: MethodSymbol => x
12121210 case x : TermSymbol => x
12131211 case _ => fatalMissingSymbol(owner, name, " method" )
12141212 }
12151213 }
12161214
1215+ private lazy val erasurePhase = findPhaseWithName(" erasure" )
12171216 def getMemberIfDefined (owner : Symbol , name : Name ): Symbol =
1218- owner.info.nonPrivateMember(name)
1217+ // findMember considered harmful after erasure; e.g.
1218+ //
1219+ // scala> exitingErasure(Symbol_apply).isOverloaded
1220+ // res27: Boolean = true
1221+ //
1222+ enteringPhaseNotLaterThan(erasurePhase )(
1223+ owner.info.nonPrivateMember(name)
1224+ )
12191225
12201226 /** Using getDecl rather than getMember may avoid issues with
12211227 * OverloadedTypes turning up when you don't want them, if you
Original file line number Diff line number Diff line change @@ -244,6 +244,18 @@ abstract class SymbolTable extends macros.Universe
244244 finally popPhase(saved)
245245 }
246246
247+ final def findPhaseWithName (phaseName : String ): Phase = {
248+ var ph = phase
249+ while (ph != NoPhase && ph.name != phaseName) {
250+ ph = ph.prev
251+ }
252+ if (ph eq NoPhase ) phase else ph
253+ }
254+ final def enteringPhaseWithName [T ](phaseName : String )(body : => T ): T = {
255+ val phase = findPhaseWithName(phaseName)
256+ enteringPhase(phase)(body)
257+ }
258+
247259 def slowButSafeEnteringPhase [T ](ph : Phase )(op : => T ): T = {
248260 if (isCompilerUniverse) enteringPhase(ph)(op)
249261 else op
Original file line number Diff line number Diff line change @@ -41,7 +41,8 @@ trait TraceSymbolActivity {
4141 }
4242 }
4343
44- private def signature (id : Int ) = runBeforeErasure(allSymbols(id).defString)
44+ private lazy val erasurePhase = findPhaseWithName(" erasure" )
45+ private def signature (id : Int ) = enteringPhase(erasurePhase)(allSymbols(id).defString)
4546
4647 private def dashes (s : Any ): String = (" " + s) map (_ => '-' )
4748 private def show (s1 : Any , ss : Any * ) {
@@ -87,14 +88,6 @@ trait TraceSymbolActivity {
8788 private def showFreq [T , U ](xs : Traversable [T ])(groupFn : T => U , showFn : U => String ) = {
8889 showMapFreq(xs.toList groupBy groupFn)(showFn)
8990 }
90- private lazy val findErasurePhase : Phase = {
91- var ph = phase
92- while (ph != NoPhase && ph.name != " erasure" ) {
93- ph = ph.prev
94- }
95- if (ph eq NoPhase ) phase else ph
96- }
97- private def runBeforeErasure [T ](body : => T ): T = enteringPhase(findErasurePhase)(body)
9891
9992 def showAllSymbols () {
10093 if (! enabled) return
Original file line number Diff line number Diff line change @@ -425,6 +425,7 @@ trait JavaUniverseForce { self: runtime.JavaUniverse =>
425425 definitions.languageFeatureModule
426426 definitions.metaAnnotations
427427 definitions.AnnotationDefaultAttr
428+ // inaccessible: definitions.erasurePhase
428429 definitions.isPhantomClass
429430 definitions.syntheticCoreClasses
430431 definitions.syntheticCoreMethods
You can’t perform that action at this time.
0 commit comments