@@ -891,11 +891,15 @@ 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.
901+ |This is a limitation that enables better GADT constraints in case class patterns""" .stripMargin
902+ do report.errorOrMigrationWarning(withExplain, clazz.srcPos, MigrationVersion .Scala2to3 )
899903 checkNoAbstractMembers()
900904 if (abstractErrors.isEmpty)
901905 checkNoAbstractDecls(clazz)
@@ -924,7 +928,7 @@ object RefChecks {
924928 for {
925929 cls <- clazz.info.baseClasses.tail
926930 if cls.paramAccessors.nonEmpty && ! mixins.contains(cls)
927- problem <- variantInheritanceProblems(cls, clazz.asClass.superClass, " parameterized" , " super" )
931+ problem <- variantInheritanceProblems(cls, clazz.asClass.superClass, i " parameterized base $cls " , " super" )
928932 }
929933 report.error(problem, clazz.srcPos)
930934 }
@@ -947,7 +951,7 @@ object RefChecks {
947951 if (combinedBT =:= thisBT) None // ok
948952 else
949953 Some (
950- em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr base $baseCls .
954+ em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr.
951955 |
952956 | Direct basetype: $thisBT
953957 | Basetype via $middleStr$middle: $combinedBT""" )
0 commit comments