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

Reply via email to