@@ -760,7 +760,9 @@ object RefChecks {
760760 def showDclAndLocation (sym : Symbol ) =
761761 s " ${sym.showDcl} in ${sym.owner.showLocated}"
762762 def undefined (msg : String ) =
763- abstractClassError(false , s " ${showDclAndLocation(member)} is not defined $msg" )
763+ val notdefined = s " ${showDclAndLocation(member)} is not defined "
764+ val text = if ! msg.isEmpty then s " $notdefined $msg" else notdefined
765+ abstractClassError(mustBeMixin = false , text)
764766 val underlying = member.underlyingSymbol
765767
766768 // Give a specific error message for abstract vars based on why it fails:
@@ -926,8 +928,19 @@ object RefChecks {
926928 if (abstractErrors.isEmpty)
927929 checkNoAbstractDecls(clazz)
928930
929- if (abstractErrors.nonEmpty)
930- report.error(abstractErrorMessage, clazzNamePos)
931+ def errorPos (cls : ClassSymbol ) =
932+ val isEnumAnonCls = // courtesy of Checking.checkEnum
933+ cls.isAnonymousClass
934+ && cls.owner.isTerm
935+ && (cls.owner.flagsUNSAFE.isAllOf(EnumCase )
936+ || ((cls.owner.name eq nme.DOLLAR_NEW ) && cls.owner.flagsUNSAFE.isAllOf(Private | Synthetic )))
937+ if isEnumAnonCls then
938+ cls.parentSyms.head.children.filterNot(_.isClass).head.srcPos
939+ else
940+ clazzNamePos
941+
942+ if abstractErrors.nonEmpty then
943+ report.error(abstractErrorMessage, errorPos(clazz))
931944
932945 checkMemberTypesOK()
933946 checkCaseClassInheritanceInvariant()
0 commit comments