scala/scala — pull request #4125 by retronym (2014-11-10 14:01:30+00:00)
Title: SI-8944 A more resiliant naming scheme for case accessors

Case class parameters that are less that public have an extra
accessor method created to ensure universal pattern matchability.
See #4081 for more background.

Currently, this is given a fresh name based on the parameter name.
However, this is fragile and the name can change based on unrelated
edits higher up in the source file.

This commit switches to a stable naming scheme for these methods.

A non-public case field `foo` has a corresponding accessor
`foo$access$N`, where `N` is the index of the parameter within
the constructor parameter list.

I have added a backwards compatiblity stub for `::$tl$1` in
anticipation of problems with partest otherwise.

The enclosed tests show a case that used to trigger a linkage
error under separate compilation that now works; shows that by
choosing the `foo$access$1` rather than `foo$1` we don't clash with
lambda lifted methods in the class; and shows the names of the
accessor methods as seen via Java reflection.

Just submitting for a test run for now.

/cc @gkossakowski who is usually has some good insights when it
comes to accessor naming schemes. This is one of the cross
compilation unit use cases that we have to deal with that Java
doesn't.