@@ -1525,18 +1525,35 @@ class AmbiguousExtensionMethod(tree: untpd.Tree, expansion1: tpd.Tree, expansion
15251525 |are possible expansions of $tree"""
15261526 def explain (using Context ) = " "
15271527
1528- class ReassignmentToVal (name : Name )(using Context )
1529- extends TypeMsg (ReassignmentToValID ) {
1530- def msg (using Context ) = i """ Reassignment to val $name"""
1531- def explain (using Context ) =
1532- i """ |You can not assign a new value to $name as values can't be changed.
1533- |Keep in mind that every statement has a value, so you may e.g. use
1534- | ${hl(" val" )} $name ${hl(" = if (condition) 2 else 5" )}
1535- |In case you need a reassignable name, you can declare it as
1536- |variable
1537- | ${hl(" var" )} $name ${hl(" =" )} ...
1538- | """
1539- }
1528+ class ReassignmentToVal (sym : Symbol , usage : Name , rhs : untpd.Tree )(using Context ) extends TypeMsg (ReassignmentToValID ):
1529+ val isSetter = usage.isSetterName && sym.info.firstParamTypes.nonEmpty
1530+ def msg (using Context ) =
1531+ if isSetter then i " Bad assignment to setter should use $usage( $rhs) "
1532+ else if sym.exists then i " Assignment to $sym"
1533+ else i " Bad assignment to $usage"
1534+ def explain (using Context ) =
1535+ val name =
1536+ if isSetter then usage.asSimpleName.dropRight(2 )
1537+ else if sym.exists then sym.name
1538+ else usage
1539+ if isSetter then
1540+ i """ |
1541+ | $usage is a setter name and can be used with assignment syntax:
1542+ | $name = $rhs
1543+ | """
1544+ else
1545+ val addendum = if ! sym.exists || ! sym.owner.isClass || sym.isSetter then " " else
1546+ i """ |
1547+ |Assignment syntax can be used if there is a corresponding setter of the form:
1548+ | ${hl(" def" )} ${name}${hl(i " _=(x: ${sym.info.resultType}): Unit = ??? " )}
1549+ | """
1550+ i """ |Members defined using `val` or `def` can't be assigned to.
1551+ |If you need to change the value of $name, use `var` instead:
1552+ | ${hl(" var" )} $name ${hl(" =" )} ???
1553+ |However, it's more common to initialize a variable just once
1554+ |with a complex expression or even a block with many statements:
1555+ | ${hl(" val" )} $name ${hl(" = if (condition) 1 else -1" )}$addendum
1556+ | """
15401557
15411558class TypeDoesNotTakeParameters (tpe : Type , params : List [untpd.Tree ])(using Context )
15421559 extends TypeMsg (TypeDoesNotTakeParametersID ) {
0 commit comments