laeubi commented on code in PR #913:
URL: https://github.com/apache/maven/pull/913#discussion_r1081687942
##########
maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java:
##########
@@ -28,4 +29,20 @@
public interface MavenWorkspaceReader extends WorkspaceReader {
Model findModel(Artifact artifact);
+
+ /**
+ * List all available artifacts this workspace repository manages.
+ *
+ * @return a stream of artifacts in no particular order
+ * @since 3.9.0
+ */
+ Stream<Artifact> listArtifacts();
Review Comment:
> So ultimately, except the point we didn't understand each others,
everything converges to a collection it seems.
It does not, implementors are free to cache items internally in what ever
way they like, this must not be exposed as API, callers are also free to hold
their own copy in whatever type they seems fit their needs, this must not
exposed in the API. Collection return types on the other hand has major
drawbacks that need to be documented and mitigated streams do not have that are:
1. Carefully document if the returned collection is the property of the
caller or the callee
2. Carefully document if the returned collection is safe to be shared across
threads
3. Carefully document if the returned collection is safe to be cached
4. Carefully document if it is modifiable or not (just see recent bug in
3.8.6 ([MNG-7316](https://issues.apache.org/jira/browse/MNG-7316))
And yes I proposed the API and I designed the API and no one ever cared to
do so before so it was designed with what I have in mind here and like to use,
collections are not, especially not just for the sake "because we always did it
that way" or some strange assumtions, otherwhise all Maven methods need to
throw `Exception` and return AutoClosable objects because you "never can know".
Thats why we have API contracts and the Contract says that a Stream (with no
particular order) must be returned, it does not claim that the Stream must be
closed nor that it throws `IOException` so if *any* I/O is performed as part of
the implementation it is the fully responsibility of this hypothetical
implementation to take action that ensure appropriate closing of system
resources is performed and I/O problems are properly handled.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]