Le sam. 10 mai 2025 à 23:27, Pankraz76 (via GitHub) <g...@apache.org> a écrit :
> > Pankraz76 commented on PR #2287: > URL: https://github.com/apache/maven/pull/2287#issuecomment-2869161451 > > > You're not working in a green field. You can't change the behavior of > APIs and assume existing clients will adapt. > > > > Yes. > > ### Which clients are affected? > > When will they get in touch? Do they live inside our JVM — at runtime > or even compile-time — like within this code repo's scope? > If so, we should be able to test and adapt accordingly. > > If not — for example, clients using the Maven wrapper — they simply > execute the `.jar` file and don’t interact with the API in a way where > immutability would matter. > > The only case I can imagine is another method using the current API and > directly manipulating the result. > In that case, wrapping the result in a simple `new ArrayList<>(...)` is > enough to make the list mutable again — that should do the trick. > Clients are mostly maven plugins or extensions. They may have relied on a list that was mutable and we can't just break them. > > Whether we return a mutable list or they create one themselves doesn’t > really matter. > > The scenario where code relies on mutating a shared reference doesn’t > apply here, since `toList()` already returns a new list instance. > Passing around mutable references would be questionable design and > could violate data integrity and the getter/setter principle. > > The core change here is introducing immutability — which is a best > practice and supports defensive programming. > We also benefit from cleaner code through method argument validation, > which is a welcome side effect. > > So overall, the change is meaningful in terms of thread safety and data > integrity — it's justified. > We just need to align the code accordingly — `reverting` potential > issues or `bridging` them by explicitly creating a new list instance when > needed. > > See also: [Create mutable list from array - Stack Overflow]( > https://stackoverflow.com/questions/11659173/create-mutable-list-from-array > ) > > Ideally, failing tests that throw `UnsupportedOperationException` will > help identify any breaking points. > > > https://docs.oracle.com/javase/9/core/creating-immutable-lists-sets-and-maps.htm#JSCOR-GUID-4F3E2B7D-CE90-4862-A78A-414FC08DA6E4 > Even if it's justified, it may be breaking, so that would be a problem. Everything that stays internal is fine. Everything that's returned by the implementation of an interface defined in org.apache.maven.api (sub-)package is fine. Everything else must be scrutinized to make sure we can't break existing plugins. > > -- > This is an automated message from the Apache Git Service. > To respond to the message, please log on to GitHub and use the > URL above to go to the specific comment. > > To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org > > For queries about this service, please contact Infrastructure at: > us...@infra.apache.org > > -- ------------------------ Guillaume Nodet