On Fri, Aug 14, 2020 at 1:18 PM Brian Goetz <[email protected]> wrote:
> > > > > Inside Google we have enabled the `-parameters` attribute by default > > and have an Error Prone check that simulates named parameters > > (https://errorprone.info/bugpattern/ParameterName). > > > > Initially we had it enabled as a compilation error. We believed that > > renames of parameters happened infrequently and rarely crossed > > compilation boundaries. We found that those renames were more > > frequent than expected, and there were a number of accidental breaking > > changes to core libraries like Guava that caused breakage at a > > distance. We ended up demoting the check to a warning. The general > > feeling was that this was mostly a problem for core libraries and not > > typical application code. One proposal was to leave it as an error by > > default, but to allow core libraries to opt out of publishing their > > parameter names. > > > > All that said, I don't think this is a problem for records since the > > names there are clearly part of the API. > > Thanks for enhancing the theoretical discussion with actual data! > Happy to help :) > The part of this that really interests me is the "boundary-crossing" > one. Within a maintenance boundary (package, module, multi-module > project, monorepo, depending on your tooling) you are free to rename at > will, using suitable refactoring tools, since you can find all the > clients and fix them. It only becomes a real problem when references > cross boundaries. > > I'm curious what's behind your intuition about why records would be > immune (not that I disagree.) Is it that they are right there in the > header? That they are so restricted that users can't lose sight of the > fact that they are special? > I think it's the same reasoning you stated in one of the messages earlier in this thread: "the name of a component in records flows into constructor descriptors, accessor names, etc." Changing the name of a record component seems to obviously be a breaking change in that it affects especially the accessor names.
