@@ -9,6 +9,7 @@ import core.Decorators._
9
9
import core .Names .TermName
10
10
import MegaPhase .MiniPhase
11
11
import config .Printers .transforms
12
+ import dotty .tools .dotc .util .Property
12
13
13
14
/** Add accessors for all protected accesses. An accessor is needed if
14
15
* according to the rules of the JVM a protected class member is not accessible
@@ -50,7 +51,15 @@ class ProtectedAccessors extends MiniPhase {
50
51
51
52
override def phaseName : String = ProtectedAccessors .name
52
53
53
- object Accessors extends AccessProxies {
54
+ private val AccessorsKey = new Property .Key [Accessors ]
55
+
56
+ private def accessors (using Context ): Accessors =
57
+ ctx.property(AccessorsKey ).get
58
+
59
+ override def prepareForUnit (tree : Tree )(using Context ): Context =
60
+ ctx.fresh.setProperty(AccessorsKey , new Accessors )
61
+
62
+ private class Accessors extends AccessProxies {
54
63
val insert : Insert = new Insert {
55
64
def accessorNameOf (name : TermName , site : Symbol )(using Context ): TermName = ProtectedAccessorName (name)
56
65
def needsAccessor (sym : Symbol )(using Context ) = ProtectedAccessors .needsAccessor(sym)
@@ -66,19 +75,20 @@ class ProtectedAccessors extends MiniPhase {
66
75
}
67
76
68
77
override def transformIdent (tree : Ident )(using Context ): Tree =
69
- Accessors .insert.accessorIfNeeded(tree)
78
+ accessors .insert.accessorIfNeeded(tree)
70
79
71
80
override def transformSelect (tree : Select )(using Context ): Tree =
72
- Accessors .insert.accessorIfNeeded(tree)
81
+ accessors .insert.accessorIfNeeded(tree)
73
82
74
83
override def transformAssign (tree : Assign )(using Context ): Tree =
75
84
tree.lhs match {
76
85
case lhs : RefTree if lhs.name.is(ProtectedAccessorName ) =>
77
- cpy.Apply (tree)(Accessors .insert.useSetter(lhs), tree.rhs :: Nil )
86
+ cpy.Apply (tree)(accessors .insert.useSetter(lhs), tree.rhs :: Nil )
78
87
case _ =>
79
88
tree
80
89
}
81
90
82
91
override def transformTemplate (tree : Template )(using Context ): Tree =
83
- cpy.Template (tree)(body = Accessors .addAccessorDefs(tree.symbol.owner, tree.body))
92
+ cpy.Template (tree)(body = accessors.addAccessorDefs(tree.symbol.owner, tree.body))
93
+
84
94
}
0 commit comments