This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-tree.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a64259  Fix regression for Maven 3.0.5
4a64259 is described below

commit 4a64259b8e4113c28593ee8c02ec028e8751d194
Author: rfscholte <[email protected]>
AuthorDate: Thu Jul 8 12:06:37 2021 +0200

    Fix regression for Maven 3.0.5
---
 pom.xml                                            |  3 +-
 .../internal/Maven3DependencyCollectorBuilder.java | 27 +++++++--
 .../internal/maven30/VerboseJavaScopeSelector.java | 64 ++++++++++++++++++++++
 3 files changed, 86 insertions(+), 8 deletions(-)

diff --git a/pom.xml b/pom.xml
index a99ae47..5eec3c6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,7 +55,6 @@
   </distributionManagement>
 
   <properties>
-    <mavenVersion>3.0</mavenVersion>
        <javaVersion>8</javaVersion>
     
<project.build.outputTimestamp>2020-02-07T09:03:59Z</project.build.outputTimestamp>
   </properties>
@@ -71,11 +70,11 @@
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-core</artifactId>
       <version>3.0.5</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-component-annotations</artifactId>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>org.sonatype.aether</groupId>
diff --git 
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
 
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
index 272fa08..8984ba0 100644
--- 
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
+++ 
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
@@ -35,10 +35,10 @@ import 
org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderExcept
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import 
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver;
 import 
org.apache.maven.shared.dependency.graph.internal.maven30.JavaScopeDeriver;
-import 
org.apache.maven.shared.dependency.graph.internal.maven30.JavaScopeSelector;
 import 
org.apache.maven.shared.dependency.graph.internal.maven30.Maven3DirectScopeDependencySelector;
 import 
org.apache.maven.shared.dependency.graph.internal.maven30.NearestVersionSelector;
 import 
org.apache.maven.shared.dependency.graph.internal.maven30.SimpleOptionalitySelector;
+import 
org.apache.maven.shared.dependency.graph.internal.maven30.VerboseJavaScopeSelector;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -107,7 +107,7 @@ public class Maven3DependencyCollectorBuilder
             DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession( repositorySystemSession );
 
             DependencyGraphTransformer transformer =
-                new ConflictResolver( new NearestVersionSelector(), new 
JavaScopeSelector(),
+                new ConflictResolver( new NearestVersionSelector(), new 
VerboseJavaScopeSelector(),
                                       new SimpleOptionalitySelector(), new 
JavaScopeDeriver() );
             session.setDependencyGraphTransformer( transformer );
 
@@ -281,10 +281,25 @@ public class Maven3DependencyCollectorBuilder
             }
         }
 
-        DefaultDependencyNode current =
-            new DefaultDependencyNode( parent, artifact, premanagedVersion, 
premanagedScope,
-                                       getVersionSelectedFromRange( 
node.getVersionConstraint() ), optional,
-                                       exclusions );
+        org.sonatype.aether.graph.DependencyNode winner =
+            (org.sonatype.aether.graph.DependencyNode) node.getData().get( 
ConflictResolver.NODE_DATA_WINNER );
+        String winnerVersion = null;
+        String ignoredScope = null;
+        if ( winner != null )
+        {
+            winnerVersion = winner.getVersion().toString();
+        }
+        else
+        {
+            ignoredScope = (String) node.getData().get( 
VerboseJavaScopeSelector.REDUCED_SCOPE );
+        }
+
+        ConflictData data = new ConflictData( winnerVersion, ignoredScope );
+
+        VerboseDependencyNode current =
+            new VerboseDependencyNode( parent, artifact, premanagedVersion, 
premanagedScope,
+                                       getVersionSelectedFromRange( 
node.getVersionConstraint() ), optional, exclusions,
+                                       data );
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( 
node.getChildren().size() );
         for ( org.sonatype.aether.graph.DependencyNode child : 
node.getChildren() )
diff --git 
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
 
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
new file mode 100644
index 0000000..85b660d
--- /dev/null
+++ 
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
@@ -0,0 +1,64 @@
+package org.apache.maven.shared.dependency.graph.internal.maven30;
+
+/*
+ * 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.
+ */
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import 
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ConflictContext;
+import 
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ScopeSelector;
+import org.sonatype.aether.RepositoryException;
+
+/**
+ * A JavaScopeSelector that keeps track of reduced scopes
+ * 
+ */
+public class VerboseJavaScopeSelector extends ScopeSelector
+{
+    public static final String REDUCED_SCOPE = "REDUCED_SCOPE";
+    
+    private final ScopeSelector scopeSelector = new JavaScopeSelector();
+
+    @Override
+    public void selectScope( ConflictContext context )
+        throws RepositoryException
+    {
+        scopeSelector.selectScope( context );
+        
+        context.getItems().stream()
+            .flatMap( i -> i.getScopes().stream() )
+            .distinct()
+            .max( new ScopeComparator() )
+            .filter( s -> s != context.getScope() )
+            .ifPresent( s -> context.getWinner().getNode().setData( 
REDUCED_SCOPE, s ) );
+    }
+    
+    static class ScopeComparator implements Comparator<String>
+    {
+        List<String> orderedScopes = Arrays.asList( "compile", "runtime", 
"provided", "test" );
+
+        @Override
+        public int compare( String lhs, String rhs )
+        {
+            return orderedScopes.indexOf( rhs ) - orderedScopes.indexOf( lhs );
+        }
+    }    
+}

Reply via email to