[ 
https://issues.apache.org/jira/browse/MNG-7924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17784304#comment-17784304
 ] 

ASF GitHub Bot commented on MNG-7924:
-------------------------------------

gnodet commented on code in PR #1299:
URL: https://github.com/apache/maven/pull/1299#discussion_r1387543172


##########
api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.api;
+
+import java.util.Map;
+
+import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Immutable;
+
+/**
+ * Dependency properties supported by Maven Core.
+ *
+ * @since 4.0.0
+ */
+@Experimental
+@Immutable
+public interface DependencyProperties {
+    /**
+     * Boolean flag telling that dependency contains all of its dependencies.
+     * Note: this flag must be kept in sync with resolver!
+     */
+    String FLAG_INCLUDES_DEPENDENCIES = "includesDependencies";
+
+    /**
+     * Boolean flag telling that dependency is meant to be placed on class 
path.
+     */
+    String FLAG_CLASS_PATH_CONSTITUENT = "classPathConstituent";
+
+    /**
+     * Returns immutable "map view" of all the properties.
+     */
+    Map<String, String> asMap();

Review Comment:
   Add `@Nonnull` to the return type.



##########
api/maven-api-core/src/main/java/org/apache/maven/api/Type.java:
##########
@@ -51,14 +51,21 @@ public interface Type {
      * Returns the dependency type id.
      * The id uniquely identifies this <i>dependency type</i>.
      *
-     * @return the id of this type
+     * @return the id of this type, never {@code null}.
      */
     String getId();
 
+    /**
+     * Returns the dependency type language.

Review Comment:
   Is that natural language or code language ?



##########
api/maven-api-core/src/main/java/org/apache/maven/api/Type.java:
##########
@@ -51,14 +51,21 @@ public interface Type {
      * Returns the dependency type id.
      * The id uniquely identifies this <i>dependency type</i>.
      *
-     * @return the id of this type
+     * @return the id of this type, never {@code null}.
      */
     String getId();
 
+    /**
+     * Returns the dependency type language.
+     *
+     * @return the language of this type, never {@code null}.
+     */
+    String getLanguage();
+
     /**
      * Get the file extension of artifacts of this type.
      *
-     * @return the file extension
+     * @return the file extension, never {@code null}.

Review Comment:
   Add @NonNull to the return type.
   
   Is this actually never null ? The ones coming from maven can be null afaik.



##########
maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java:
##########
@@ -59,8 +62,37 @@ private MavenRepositorySystemUtils() {
      * the session with authentication, mirror, proxy and other information 
required for your environment.
      *
      * @return The new repository system session, never {@code null}.
+     * @deprecated This method is deprecated.
      */
+    @Deprecated
     public static DefaultRepositorySystemSession newSession() {
+        DefaultArtifactTypeRegistry stereotypes = new 
DefaultArtifactTypeRegistry();
+        stereotypes.add(new DefaultArtifactType("pom"));

Review Comment:
   Should we use `DefaultTypeRegistry` and the various providers here instead ?



##########
api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.api;
+
+import java.util.Map;
+
+import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Immutable;
+
+/**
+ * Dependency properties supported by Maven Core.
+ *
+ * @since 4.0.0
+ */
+@Experimental
+@Immutable
+public interface DependencyProperties {
+    /**
+     * Boolean flag telling that dependency contains all of its dependencies.
+     * Note: this flag must be kept in sync with resolver!
+     */
+    String FLAG_INCLUDES_DEPENDENCIES = "includesDependencies";
+
+    /**
+     * Boolean flag telling that dependency is meant to be placed on class 
path.
+     */
+    String FLAG_CLASS_PATH_CONSTITUENT = "classPathConstituent";
+
+    /**
+     * Returns immutable "map view" of all the properties.
+     */
+    Map<String, String> asMap();
+
+    /**
+     * Returns {@code true} if given flag is {@code true}.
+     */
+    boolean checkFlag(String flag);

Review Comment:
   Add either `@Nonnull` or `@Nullable` to `flag`.



##########
api/maven-api-core/src/main/java/org/apache/maven/api/Type.java:
##########
@@ -67,17 +74,19 @@ public interface Type {
      * The default classifier can be overridden when specifying
      * the {@link Dependency#getClassifier()}.
      *
-     * @return the default classifier
+     * @return the default classifier, or {@code null}.
      */

Review Comment:
   Add `@Nullable` to the return type.
   



##########
api/maven-api-core/src/main/java/org/apache/maven/api/Type.java:
##########
@@ -51,14 +51,21 @@ public interface Type {
      * Returns the dependency type id.
      * The id uniquely identifies this <i>dependency type</i>.
      *
-     * @return the id of this type
+     * @return the id of this type, never {@code null}.
      */
     String getId();

Review Comment:
   Add `@Nonnull` to the return type.



##########
api/maven-api-core/src/main/java/org/apache/maven/api/Type.java:
##########
@@ -51,14 +51,21 @@ public interface Type {
      * Returns the dependency type id.
      * The id uniquely identifies this <i>dependency type</i>.
      *
-     * @return the id of this type
+     * @return the id of this type, never {@code null}.
      */
     String getId();
 
+    /**
+     * Returns the dependency type language.
+     *
+     * @return the language of this type, never {@code null}.
+     */
+    String getLanguage();

Review Comment:
   Add `@Nonnull` to the return type.
   
   Has this ever been in use anywhere ? 
   



##########
maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java:
##########
@@ -22,51 +22,55 @@
 import javax.inject.Named;
 import javax.inject.Singleton;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.maven.api.Type;
+import org.apache.maven.api.services.TypeRegistry;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  */
 @Named
 @Singleton
 public class DefaultArtifactHandlerManager implements ArtifactHandlerManager {
+    private final TypeRegistry typeRegistry;
 
-    private final Map<String, ArtifactHandler> artifactHandlers;
-
-    private final Map<String, ArtifactHandler> allHandlers = new 
ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, ArtifactHandler> handlers;
 
     @Inject
-    public DefaultArtifactHandlerManager(Map<String, ArtifactHandler> 
artifactHandlers) {
-        this.artifactHandlers = artifactHandlers;
+    public DefaultArtifactHandlerManager(TypeRegistry typeRegistry) {
+        this.typeRegistry = requireNonNull(typeRegistry, "null typeRegistry");
+        this.handlers = new ConcurrentHashMap<>();
     }
 
-    public ArtifactHandler getArtifactHandler(String type) {
-        ArtifactHandler handler = allHandlers.get(type);
-
-        if (handler == null) {
-            handler = artifactHandlers.get(type);
-
-            if (handler == null) {
-                handler = new DefaultArtifactHandler(type);
-            } else {
-                allHandlers.put(type, handler);
-            }
-        }
-
-        return handler;
+    public ArtifactHandler getArtifactHandler(String id) {
+        return handlers.computeIfAbsent(id, k -> {
+            Type type = typeRegistry.getType(id);
+            return new DefaultArtifactHandler(
+                    id,
+                    type.getExtension(),
+                    type.getClassifier(),
+                    null,
+                    null,
+                    type.isIncludesDependencies(),
+                    type.getLanguage(),
+                    type.isAddedToClassPath()); // TODO: watch out for module 
path
+        });
     }
 
     public void addHandlers(Map<String, ArtifactHandler> handlers) {
         // legacy support for maven-gpg-plugin:1.0
-        allHandlers.putAll(handlers);
+        throw new IllegalArgumentException("you cannot do this anymore");

Review Comment:
   `throw new UnsupportedOperationException("Adding handlers is not supported 
anymore")` ?



##########
maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java:
##########
@@ -22,51 +22,55 @@
 import javax.inject.Named;
 import javax.inject.Singleton;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.maven.api.Type;
+import org.apache.maven.api.services.TypeRegistry;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  */
 @Named
 @Singleton
 public class DefaultArtifactHandlerManager implements ArtifactHandlerManager {
+    private final TypeRegistry typeRegistry;
 
-    private final Map<String, ArtifactHandler> artifactHandlers;
-
-    private final Map<String, ArtifactHandler> allHandlers = new 
ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, ArtifactHandler> handlers;
 
     @Inject
-    public DefaultArtifactHandlerManager(Map<String, ArtifactHandler> 
artifactHandlers) {
-        this.artifactHandlers = artifactHandlers;
+    public DefaultArtifactHandlerManager(TypeRegistry typeRegistry) {
+        this.typeRegistry = requireNonNull(typeRegistry, "null typeRegistry");
+        this.handlers = new ConcurrentHashMap<>();
     }
 
-    public ArtifactHandler getArtifactHandler(String type) {
-        ArtifactHandler handler = allHandlers.get(type);
-
-        if (handler == null) {
-            handler = artifactHandlers.get(type);
-
-            if (handler == null) {
-                handler = new DefaultArtifactHandler(type);
-            } else {
-                allHandlers.put(type, handler);
-            }
-        }
-
-        return handler;
+    public ArtifactHandler getArtifactHandler(String id) {
+        return handlers.computeIfAbsent(id, k -> {
+            Type type = typeRegistry.getType(id);
+            return new DefaultArtifactHandler(
+                    id,
+                    type.getExtension(),
+                    type.getClassifier(),
+                    null,
+                    null,
+                    type.isIncludesDependencies(),
+                    type.getLanguage(),
+                    type.isAddedToClassPath()); // TODO: watch out for module 
path
+        });
     }
 
     public void addHandlers(Map<String, ArtifactHandler> handlers) {
         // legacy support for maven-gpg-plugin:1.0
-        allHandlers.putAll(handlers);
+        throw new IllegalArgumentException("you cannot do this anymore");
     }
 
     @Deprecated
     public Set<String> getHandlerTypes() {
-        return artifactHandlers.keySet();
+        return Collections.emptySet();

Review Comment:
   That looks wrong. Should we either delegate to `TypeRegistry` or throw an 
exception ?



##########
maven-core/src/main/java/org/apache/maven/artifact/handler/manager/LegacyArtifactHandlerManager.java:
##########
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.artifact.handler.manager;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+
+/**
+ */
+@Named
+@Singleton
+public class LegacyArtifactHandlerManager implements ArtifactHandlerManager {

Review Comment:
   Why do we need the `LegacyArtifactHandlerManager` _and_ the 
`DefaultArtifactHandlerManager` at the same time ?





> Better control over and better integration with Resolver
> --------------------------------------------------------
>
>                 Key: MNG-7924
>                 URL: https://issues.apache.org/jira/browse/MNG-7924
>             Project: Maven
>          Issue Type: Task
>          Components: Artifacts and Repositories
>            Reporter: Tamas Cservenak
>            Priority: Major
>             Fix For: 4.0.0-alpha-9
>
>
> Integrate better and obtain better control over Resolver. These changes did 
> stem from "[JPMS module 
> experiment|https://cwiki.apache.org/confluence/display/MAVEN/Experiment+-+Explicit+JPMS+support]";
>  and are considered improvement but *does not implement any functionality* 
> related to JPMS module support.
> Changes:
> * Maven4 should stop "disconnected coexistence" of two type systems 
> (ArtifactHandlers and Resolver ArtifactTypeRegistry), it should unify them.
> * Maven4 Core should provide generic and extensible means to introduce new 
> artifact types (fully in extension, and extension should get extended data 
> via "roundtrip" in core/resolver)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to