You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/05/24 13:49:52 UTC

[maven-resolver] branch tmp-collect-listener-2 created (now e7f04bef)

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

cstamas pushed a change to branch tmp-collect-listener-2
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


      at e7f04bef Idea2: collector using RequestTrace

This branch includes the following new commits:

     new e7f04bef Idea2: collector using RequestTrace

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-resolver] 01/01: Idea2: collector using RequestTrace

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch tmp-collect-listener-2
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit e7f04befdf2b952c2ae16e2079225429978a3d25
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue May 24 15:49:16 2022 +0200

    Idea2: collector using RequestTrace
    
    To pass over contextual information to listeners.
---
 .../examples/util/ConsoleRepositoryListener.java   | 34 +++++++++++--
 .../impl/collect/DependencyCollectorDelegate.java  | 12 +++++
 .../impl/collect/DependencyCollectorTrace.java     | 58 ++++++++++++++++++++++
 .../impl/collect/bf/BfDependencyCollector.java     | 25 +++++-----
 .../impl/collect/df/DfDependencyCollector.java     | 46 ++++++++---------
 5 files changed, 133 insertions(+), 42 deletions(-)

diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
index 2d5fbafe..d864532f 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
@@ -8,9 +8,9 @@ package org.apache.maven.resolver.examples.util;
  * 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
@@ -23,6 +23,9 @@ import java.io.PrintStream;
 
 import org.eclipse.aether.AbstractRepositoryListener;
 import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.internal.impl.collect.DependencyCollectorTrace;
 
 import static java.util.Objects.requireNonNull;
 
@@ -30,7 +33,7 @@ import static java.util.Objects.requireNonNull;
  * A simplistic repository listener that logs events to the console.
  */
 public class ConsoleRepositoryListener
-    extends AbstractRepositoryListener
+        extends AbstractRepositoryListener
 {
 
     private final PrintStream out;
@@ -61,7 +64,7 @@ public class ConsoleRepositoryListener
     {
         requireNonNull( event, "event cannot be null" );
         out.println( "Invalid artifact descriptor for " + event.getArtifact() + ": "
-            + event.getException().getMessage() );
+                + event.getException().getMessage() );
     }
 
     public void artifactDescriptorMissing( RepositoryEvent event )
@@ -85,6 +88,27 @@ public class ConsoleRepositoryListener
     public void artifactResolved( RepositoryEvent event )
     {
         requireNonNull( event, "event cannot be null" );
+        DependencyCollectorTrace dependencyCollectorTrace = null;
+        RequestTrace trace = event.getTrace();
+        while ( trace != null )
+        {
+            if ( trace.getData() instanceof DependencyCollectorTrace )
+            {
+                dependencyCollectorTrace = (DependencyCollectorTrace) trace.getData();
+                break;
+            }
+            trace = trace.getParent();
+        }
+        if ( dependencyCollectorTrace != null && event.getArtifact().getFile() != null )
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            for ( DependencyNode dependency : dependencyCollectorTrace.getPath() )
+            {
+                stringBuilder.append( " -> " ).append( dependency.getArtifact() );
+            }
+            stringBuilder.append( " -> " ).append( dependencyCollectorTrace.getNode() );
+            out.println( ">> " + stringBuilder.toString() );
+        }
         out.println( "Resolved artifact " + event.getArtifact() + " from " + event.getRepository() );
     }
 
@@ -103,7 +127,7 @@ public class ConsoleRepositoryListener
     public void artifactResolving( RepositoryEvent event )
     {
         requireNonNull( event, "event cannot be null" );
-        out.println( "Resolving artifact " + event.getArtifact() );
+        //out.println( "Resolving artifact " + event.getArtifact() );
     }
 
     public void metadataDeployed( RepositoryEvent event )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
index 14d70c2a..de644e09 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
@@ -294,6 +294,18 @@ public abstract class DependencyCollectorDelegate implements DependencyCollector
         return result;
     }
 
+    protected RequestTrace trailTrace( RequestTrace trace, String context, List<DependencyNode> path, Dependency node )
+    {
+        return RequestTrace.newChild(
+                trace,
+                new DependencyCollectorTrace(
+                        context,
+                        path,
+                        node
+                )
+        );
+    }
+
     @SuppressWarnings( "checkstyle:parameternumber" )
     protected abstract void doCollectDependencies( RepositorySystemSession session, RequestTrace trace, DataPool pool,
                                                    DefaultDependencyCollectionContext context,
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java
new file mode 100644
index 00000000..5042ee6e
--- /dev/null
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java
@@ -0,0 +1,58 @@
+package org.eclipse.aether.internal.impl.collect;
+
+/*
+ * 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.List;
+
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Trace objects for dependency collection.
+ *
+ * @since 1.8.1
+ */
+public final class DependencyCollectorTrace
+{
+    private final String context;
+
+    private final List<DependencyNode> path;
+
+    private final Dependency node;
+
+    public DependencyCollectorTrace( final String context, final List<DependencyNode> path, final Dependency node )
+    {
+        this.context = context;
+        this.path = requireNonNull( path );
+        this.node = requireNonNull( node );
+    }
+
+    public List<DependencyNode> getPath()
+    {
+        return path;
+    }
+
+    public Dependency getNode()
+    {
+        return node;
+    }
+}
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
index 8542dc7c..244f95d1 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
@@ -126,7 +126,7 @@ public class BfDependencyCollector
         }
 
         Args args =
-                new Args( session, trace, pool, context, versionContext, request,
+                new Args( session, pool, context, versionContext, request,
                         useSkip ? DependencyResolutionSkipper.defaultSkipper()
                                 : DependencyResolutionSkipper.neverSkipper() );
 
@@ -150,7 +150,7 @@ public class BfDependencyCollector
 
         while ( !args.dependencyProcessingQueue.isEmpty() )
         {
-            processDependency( args, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(),
+            processDependency( args, trace, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(),
                     false );
         }
 
@@ -158,15 +158,17 @@ public class BfDependencyCollector
     }
 
     @SuppressWarnings( "checkstyle:parameternumber" )
-    private void processDependency( Args args, Results results, DependencyProcessingContext context,
-                                    List<Artifact> relocations, boolean disableVersionManagement )
+    private void processDependency( Args args, RequestTrace parent, Results results,
+                                    DependencyProcessingContext context, List<Artifact> relocations,
+                                    boolean disableVersionManagement )
     {
-
         if ( context.depSelector != null && !context.depSelector.selectDependency( context.dependency ) )
         {
             return;
         }
 
+        RequestTrace trace = trailTrace( parent, args.request.getRequestContext(), context.parents,
+                context.dependency );
         PremanagedDependency preManaged =
                 PremanagedDependency.create( context.depManager, context.dependency, disableVersionManagement,
                         args.premanagedState );
@@ -182,7 +184,7 @@ public class BfDependencyCollector
         VersionRangeResult rangeResult;
         try
         {
-            VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), args.trace,
+            VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), trace,
                     context.repositories, dependency );
 
             rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session );
@@ -203,7 +205,7 @@ public class BfDependencyCollector
             Dependency d = dependency.setArtifact( originalArtifact );
 
             ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(
-                    args.request.getRequestContext(), args.trace, context.repositories, d );
+                    args.request.getRequestContext(), trace, context.repositories, d );
 
             final ArtifactDescriptorResult descriptorResult =
                     noDescriptor
@@ -236,8 +238,8 @@ public class BfDependencyCollector
                         originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() )
                             && originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() );
 
-                    processDependency( args, results, context.withDependency( d ), descriptorResult.getRelocations(),
-                            disableVersionManagementSubsequently );
+                    processDependency( args, parent, results, context.withDependency( d ),
+                            descriptorResult.getRelocations(), disableVersionManagementSubsequently );
                     return;
                 }
                 else
@@ -372,8 +374,6 @@ public class BfDependencyCollector
 
         final boolean premanagedState;
 
-        final RequestTrace trace;
-
         final DataPool pool;
 
         final Queue<DependencyProcessingContext> dependencyProcessingQueue = new ArrayDeque<>( 128 );
@@ -386,7 +386,7 @@ public class BfDependencyCollector
 
         final DependencyResolutionSkipper skipper;
 
-        Args( RepositorySystemSession session, RequestTrace trace, DataPool pool,
+        Args( RepositorySystemSession session, DataPool pool,
                      DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext,
                      CollectRequest request, DependencyResolutionSkipper skipper )
         {
@@ -394,7 +394,6 @@ public class BfDependencyCollector
             this.request = request;
             this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories();
             this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE );
-            this.trace = trace;
             this.pool = pool;
             this.collectionContext = collectionContext;
             this.versionContext = versionContext;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
index 4bfaf872..a12a39a0 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
@@ -102,9 +102,9 @@ public class DfDependencyCollector
         NodeStack nodes = new NodeStack();
         nodes.push( node );
 
-        Args args = new Args( session, trace, pool, nodes, context, versionContext, request );
+        Args args = new Args( session, pool, nodes, context, versionContext, request );
 
-        process( args, results, dependencies, repositories,
+        process( args, trace, results, dependencies, repositories,
                 session.getDependencySelector() != null
                         ? session.getDependencySelector().deriveChildSelector( context ) : null,
                 session.getDependencyManager() != null
@@ -116,40 +116,41 @@ public class DfDependencyCollector
     }
 
         @SuppressWarnings( "checkstyle:parameternumber" )
-    private void process( final Args args, Results results, List<Dependency> dependencies,
+    private void process( final Args args, RequestTrace trace, Results results, List<Dependency> dependencies,
                           List<RemoteRepository> repositories, DependencySelector depSelector,
                           DependencyManager depManager, DependencyTraverser depTraverser, VersionFilter verFilter )
     {
         for ( Dependency dependency : dependencies )
         {
-            processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter,
+            processDependency( args, trace, results, repositories, depSelector, depManager, depTraverser, verFilter,
                                dependency );
         }
     }
 
     @SuppressWarnings( "checkstyle:parameternumber" )
-    private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
+    private void processDependency( Args args, RequestTrace trace, Results results, List<RemoteRepository> repositories,
                                     DependencySelector depSelector, DependencyManager depManager,
                                     DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency )
     {
 
         List<Artifact> relocations = Collections.emptyList();
-        processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, dependency,
-                           relocations, false );
+        processDependency( args, trace, results, repositories, depSelector, depManager, depTraverser, verFilter,
+                dependency, relocations, false );
     }
 
     @SuppressWarnings( "checkstyle:parameternumber" )
-    private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
-                                    DependencySelector depSelector, DependencyManager depManager,
-                                    DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency,
-                                    List<Artifact> relocations, boolean disableVersionManagement )
+    private void processDependency( Args args, RequestTrace parent, Results results,
+                                    List<RemoteRepository> repositories, DependencySelector depSelector,
+                                    DependencyManager depManager, DependencyTraverser depTraverser,
+                                    VersionFilter verFilter, Dependency dependency, List<Artifact> relocations,
+                                    boolean disableVersionManagement )
     {
-
         if ( depSelector != null && !depSelector.selectDependency( dependency ) )
         {
             return;
         }
 
+        RequestTrace trace = trailTrace( parent, args.request.getRequestContext(), args.nodes.nodes, dependency );
         PremanagedDependency preManaged =
             PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState );
         dependency = preManaged.getManagedDependency();
@@ -162,7 +163,7 @@ public class DfDependencyCollector
         VersionRangeResult rangeResult;
         try
         {
-            VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), args.trace,
+            VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), trace,
                     repositories, dependency );
 
             rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session );
@@ -181,7 +182,7 @@ public class DfDependencyCollector
             Dependency d = dependency.setArtifact( originalArtifact );
 
             ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(
-                    args.request.getRequestContext(), args.trace, repositories, d );
+                    args.request.getRequestContext(), trace, repositories, d );
 
             final ArtifactDescriptorResult descriptorResult =
                 getArtifactDescriptorResult( args, results, noDescriptor, d, descriptorRequest );
@@ -212,8 +213,8 @@ public class DfDependencyCollector
                         originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() )
                             && originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() );
 
-                    processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
-                                       descriptorResult.getRelocations(), disableVersionManagementSubsequently );
+                    processDependency( args, parent, results, repositories, depSelector, depManager, depTraverser,
+                            verFilter, d, descriptorResult.getRelocations(), disableVersionManagementSubsequently );
                     return;
                 }
                 else
@@ -232,8 +233,8 @@ public class DfDependencyCollector
                     boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
                     if ( recurse )
                     {
-                        doRecurse( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
-                                   descriptorResult, child );
+                        doRecurse( args, parent, results, repositories, depSelector, depManager, depTraverser,
+                                verFilter, d, descriptorResult, child );
                     }
                 }
             }
@@ -251,7 +252,7 @@ public class DfDependencyCollector
     }
 
     @SuppressWarnings( "checkstyle:parameternumber" )
-    private void doRecurse( Args args, Results results, List<RemoteRepository> repositories,
+    private void doRecurse( Args args, RequestTrace trace, Results results, List<RemoteRepository> repositories,
                             DependencySelector depSelector, DependencyManager depManager,
                             DependencyTraverser depTraverser, VersionFilter verFilter, Dependency d,
                             ArtifactDescriptorResult descriptorResult, DefaultDependencyNode child )
@@ -280,7 +281,7 @@ public class DfDependencyCollector
 
             args.nodes.push( child );
 
-            process( args, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager,
+            process( args, trace, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager,
                      childTraverser, childFilter );
 
             args.nodes.pop();
@@ -340,8 +341,6 @@ public class DfDependencyCollector
 
         final boolean premanagedState;
 
-        final RequestTrace trace;
-
         final DataPool pool;
 
         final NodeStack nodes;
@@ -352,7 +351,7 @@ public class DfDependencyCollector
 
         final CollectRequest request;
 
-        Args( RepositorySystemSession session, RequestTrace trace, DataPool pool, NodeStack nodes,
+        Args( RepositorySystemSession session, DataPool pool, NodeStack nodes,
                      DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext,
                      CollectRequest request )
         {
@@ -360,7 +359,6 @@ public class DfDependencyCollector
             this.request = request;
             this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories();
             this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE );
-            this.trace = trace;
             this.pool = pool;
             this.nodes = nodes;
             this.collectionContext = collectionContext;