@@ -891,11 +891,14 @@ object RefChecks {
891891 * can assume invariant refinement for case classes in `constrainPatternType`.
892892 */
893893 def checkCaseClassInheritanceInvariant () =
894- for (caseCls <- clazz.info.baseClasses.tail.find(_.is(Case )))
895- for (baseCls <- caseCls.info.baseClasses.tail)
896- if (baseCls.typeParams.exists(_.paramVarianceSign != 0 ))
897- for (problem <- variantInheritanceProblems(baseCls, caseCls, " non-variant" , " case " ))
898- report.errorOrMigrationWarning(problem, clazz.srcPos, MigrationVersion .Scala2to3 )
894+ for
895+ caseCls <- clazz.info.baseClasses.tail.find(_.is(Case ))
896+ baseCls <- caseCls.info.baseClasses.tail
897+ if baseCls.typeParams.exists(_.paramVarianceSign != 0 )
898+ problem <- variantInheritanceProblems(baseCls, caseCls, i " base $baseCls" , " case " )
899+ withExplain = problem.appendExplanation:
900+ " Refining a basetype of a case class is not allowed, enabling better GADT constraints in case class patterns."
901+ do report.errorOrMigrationWarning(withExplain, clazz.srcPos, MigrationVersion .Scala2to3 )
899902 checkNoAbstractMembers()
900903 if (abstractErrors.isEmpty)
901904 checkNoAbstractDecls(clazz)
@@ -924,7 +927,7 @@ object RefChecks {
924927 for {
925928 cls <- clazz.info.baseClasses.tail
926929 if cls.paramAccessors.nonEmpty && ! mixins.contains(cls)
927- problem <- variantInheritanceProblems(cls, clazz.asClass.superClass, " parameterized" , " super" )
930+ problem <- variantInheritanceProblems(cls, clazz.asClass.superClass, i " parameterized base $cls " , " super" )
928931 }
929932 report.error(problem, clazz.srcPos)
930933 }
@@ -947,7 +950,7 @@ object RefChecks {
947950 if (combinedBT =:= thisBT) None // ok
948951 else
949952 Some (
950- em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr base $baseCls .
953+ em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr.
951954 |
952955 | Direct basetype: $thisBT
953956 | Basetype via $middleStr$middle: $combinedBT""" )
0 commit comments