diff options
Diffstat (limited to 'sources/scalac/transformer/AddInterfacesPhase.java')
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index ee3f939957..6bf1a8fe40 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -226,12 +226,19 @@ public class AddInterfacesPhase extends PhaseDescriptor { } else symMap = map; - Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner); - Type newTp = thisTypeMap.apply(substParams(clone.info(), symMap)); - clone.updateInfo(newTp); + updateMemberInfo(clone, oldOwner, newOwner, symMap); return clone; } + protected void updateMemberInfo(Symbol member, + Symbol oldOwner, + Symbol newOwner, + SymbolSubstTypeMap map) { + Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner); + Type newTp = thisTypeMap.apply(substParams(member.info(), map)); + member.updateInfo(newTp); + } + protected HashMap ifaceToClass = new HashMap(); protected HashMap classToIFace = new HashMap(); @@ -275,8 +282,6 @@ public class AddInterfacesPhase extends PhaseDescriptor { // modified anymore. classSubst = Collections.unmodifiableMap(classSubst); - Type.SubstThisMap thisTpMap = new Type.SubstThisMap(ifaceSym, classSym); - Symbol[] vparams = classConstrSym.valueParams(); for (int i = 0; i < vparams.length; ++i) { vparams[i].setOwner(classConstrSym); @@ -309,13 +314,13 @@ public class AddInterfacesPhase extends PhaseDescriptor { paramsSubst); ifaceMemberSym.flags |= Modifiers.DEFERRED; - classMemberSym.updateInfo(thisTpMap.apply(classMemberSym.info())); classMembersMap.put(ifaceMemberSym, classMemberSym); } else { // Member doesn't go in interface, we just make it // owned by the class. classMemberSym = ifaceMemberSym; classMemberSym.setOwner(classSym); + updateMemberInfo(classMemberSym, ifaceSym, classSym, paramsSubst); } Type nextMemberTp = classMemberSym.nextInfo(); classMemberSym.updateInfo(paramsSubst.apply(nextMemberTp)); |