@@ -891,11 +891,14 @@ object RefChecks {
891
891
* can assume invariant refinement for case classes in `constrainPatternType`.
892
892
*/
893
893
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 )
899
902
checkNoAbstractMembers()
900
903
if (abstractErrors.isEmpty)
901
904
checkNoAbstractDecls(clazz)
@@ -924,7 +927,7 @@ object RefChecks {
924
927
for {
925
928
cls <- clazz.info.baseClasses.tail
926
929
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" )
928
931
}
929
932
report.error(problem, clazz.srcPos)
930
933
}
@@ -947,7 +950,7 @@ object RefChecks {
947
950
if (combinedBT =:= thisBT) None // ok
948
951
else
949
952
Some (
950
- em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr base $baseCls .
953
+ em """ illegal inheritance: $clazz inherits conflicting instances of $baseStr.
951
954
|
952
955
| Direct basetype: $thisBT
953
956
| Basetype via $middleStr$middle: $combinedBT""" )
0 commit comments