@@ -19,6 +19,7 @@ import DenotTransformers._
19
19
import typer .Checking
20
20
import Names .Name
21
21
import NameOps ._
22
+ import StdNames ._
22
23
23
24
24
25
/** The first tree transform
@@ -72,10 +73,21 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi
72
73
case Nil => Nil
73
74
}
74
75
75
- def newCompanion (name : TermName ): Thicket = {
76
+ def newCompanion (name : TermName , forClass : Symbol ): Thicket = {
76
77
val modul = ctx.newCompleteModuleSymbol(ctx.owner, name, Synthetic , Synthetic ,
77
78
defn.ObjectClass .typeRef :: Nil , Scopes .newScope)
79
+ val mc = modul.moduleClass
78
80
if (ctx.owner.isClass) modul.enteredAfter(thisTransformer)
81
+ ctx.newSymbol(
82
+ owner = mc,
83
+ name = nme.COMPANION_CLASS_METHOD ,
84
+ flags = Flags .Synthetic | Flags .Private ,
85
+ info = ExprType (forClass.typeRef)).enteredAfter(thisTransformer)
86
+ ctx.newSymbol(
87
+ owner = forClass,
88
+ name = nme.COMPANION_MODULE_METHOD ,
89
+ flags = Flags .Synthetic | Flags .Private ,
90
+ info = ExprType (mc.typeRef)).enteredAfter(thisTransformer)
79
91
ModuleDef (modul, Nil )
80
92
}
81
93
@@ -89,7 +101,7 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi
89
101
false
90
102
}
91
103
val uniqueName = if (nameClash) objName.avoidClashName else objName
92
- Thicket (stat :: newCompanion(uniqueName).trees)
104
+ Thicket (stat :: newCompanion(uniqueName, stat.symbol ).trees)
93
105
case stat => stat
94
106
}
95
107
0 commit comments