@@ -790,7 +790,9 @@ object RefChecks {
790790 def showDclAndLocation (sym : Symbol ) =
791791 s " ${sym.showDcl} in ${sym.owner.showLocated}"
792792 def undefined (msg : String ) =
793- abstractClassError(false , s " ${showDclAndLocation(member)} is not defined $msg" )
793+ val notdefined = s " ${showDclAndLocation(member)} is not defined "
794+ val text = if ! msg.isEmpty then s " $notdefined $msg" else notdefined
795+ abstractClassError(mustBeMixin = false , text)
794796 val underlying = member.underlyingSymbol
795797
796798 // Give a specific error message for abstract vars based on why it fails:
@@ -956,8 +958,19 @@ object RefChecks {
956958 if (abstractErrors.isEmpty)
957959 checkNoAbstractDecls(clazz)
958960
959- if (abstractErrors.nonEmpty)
960- report.error(abstractErrorMessage, clazz.srcPos)
961+ def errorPos (cls : ClassSymbol ) =
962+ val isEnumAnonCls = // courtesy of Checking.checkEnum
963+ cls.isAnonymousClass
964+ && cls.owner.isTerm
965+ && (cls.owner.flagsUNSAFE.isAllOf(EnumCase )
966+ || ((cls.owner.name eq nme.DOLLAR_NEW ) && cls.owner.flagsUNSAFE.isAllOf(Private | Synthetic )))
967+ if isEnumAnonCls then
968+ cls.parentSyms.head.children.filterNot(_.isClass).head.srcPos
969+ else
970+ cls.srcPos
971+
972+ if abstractErrors.nonEmpty then
973+ report.error(abstractErrorMessage, errorPos(clazz))
961974
962975 checkMemberTypesOK()
963976 checkCaseClassInheritanceInvariant()
0 commit comments