Skip to content

Commit c69075a

Browse files
committed
ExpandPrivate: Make sure Deferred members are not Private.
1 parent c01413e commit c69075a

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/dotty/tools/dotc/transform/ExpandPrivate.scala

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package dotty.tools.dotc
22
package transform
33

44
import core._
5-
import DenotTransformers.IdentityDenotTransformer
5+
import dotty.tools.dotc.core.DenotTransformers.{SymTransformer, IdentityDenotTransformer}
66
import Contexts.Context
77
import Symbols._
88
import Scopes._
@@ -16,14 +16,23 @@ import Decorators._
1616
import ast.Trees._
1717
import TreeTransforms._
1818

19-
/** Make private term members accessed from other classes non-private
20-
* by resetting the Private flag and expanding their name.
19+
/** Make private term members that are:
20+
* - accessed from another class
21+
* - deferred
22+
* non-private by resetting the Private flag and expanding their name.
2123
*/
22-
class ExpandPrivate extends MiniPhaseTransform with IdentityDenotTransformer { thisTransform =>
24+
class ExpandPrivate extends MiniPhaseTransform with SymTransformer { thisTransform =>
2325
import ast.tpd._
2426

2527
override def phaseName: String = "expandPrivate"
2628

29+
30+
def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation = {
31+
if (sym.is(Method) && sym.is(Deferred))
32+
sym.ensureNotPrivate
33+
else sym
34+
}
35+
2736
/** Make private terms accessed from different classes non-private.
2837
* Note: this happens also for accesses between class and linked module class.
2938
* If we change the scheme at one point to make static module class computations

0 commit comments

Comments
 (0)