diff options
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index cb42bc15fd..ca3342a86b 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -136,10 +136,8 @@ public class AddInterfacesPhase extends Phase { return new Type.MethodType(Symbol.EMPTY_ARRAY, result); case PolyType(Symbol[] tps, Type result): return new Type.PolyType(tps, removeValueParams(result)); - case OverloadedType(_, Type[] altTypes): - return removeValueParams(altTypes[0]); default: - return tp; + throw Debug.abort("illegal case", tp); } } @@ -209,6 +207,15 @@ public class AddInterfacesPhase extends Phase { classSym.name = className(ifaceSym.name); classSym.flags &= ~Modifiers.INTERFACE; + // Remove non-primary constructors from interface + if (ifaceSym.allConstructors().isOverloaded()) { + Symbol primary = ifaceSym.primaryConstructor(); + Symbol[] altsyms = { primary }; + Type[] alttypes = { primary.nextType() }; + Type allType = Type.OverloadedType(altsyms, alttypes); + ifaceSym.allConstructors().updateInfo(allType); + } + Scope ifaceOwnerMembers = ifaceSym.owner().members(); ifaceOwnerMembers.enter(classSym); |