@@ -159,19 +159,24 @@ abstract class ExplicitOuter extends InfoTransform
159
159
* elides outer pointers.
160
160
*/
161
161
def transformInfo (sym : Symbol , tp : Type ): Type = tp match {
162
- case MethodType (params, restpe1) =>
163
- val restpe = transformInfo(sym, restpe1)
164
- if (sym.owner.isTrait && ((sym hasFlag (ACCESSOR | SUPERACCESSOR )) || sym.isModule)) { // 5
165
- sym.makeNotPrivate(sym.owner)
162
+ case MethodType (params, resTp) =>
163
+ val resTpTransformed = transformInfo(sym, resTp)
164
+
165
+ // juggle flags (and mangle names) after transforming info
166
+ if (sym.owner.isTrait) {
167
+ // TODO: I don't believe any private accessors remain after the fields phase
168
+ if ((sym hasFlag (ACCESSOR | SUPERACCESSOR )) || sym.isModule) sym.makeNotPrivate(sym.owner) // 5
169
+ if (sym.isProtected) sym setFlag notPROTECTED // 6
166
170
}
167
- if (sym.owner.isTrait && sym.isProtected) sym setFlag notPROTECTED // 6
168
- if (sym.isClassConstructor && isInner(sym.owner)) { // 1
169
- val p = sym.newValueParameter(innerClassConstructorParamName, sym.pos)
170
- . setInfo(sym.owner.outerClass.thisType)
171
- MethodType (p :: params, restpe)
172
- } else if (restpe ne restpe1)
173
- MethodType ( params, restpe )
171
+
172
+ val paramsWithOuter =
173
+ if ( sym.isClassConstructor && isInner( sym.owner)) // 1
174
+ sym.newValueParameter(innerClassConstructorParamName, sym.pos). setInfo(sym.owner.outerClass.thisType) :: params
175
+ else params
176
+
177
+ if ((resTpTransformed ne resTp) || (paramsWithOuter ne params)) MethodType (paramsWithOuter, resTpTransformed )
174
178
else tp
179
+
175
180
case ClassInfoType (parents, decls, clazz) =>
176
181
var decls1 = decls
177
182
if (isInner(clazz) && ! clazz.isInterface) {
0 commit comments