You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/01/27 17:20:04 UTC

[maven-surefire] branch master updated: [SUREFIRE-1987] Refactor ProviderDetector

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 48f403e  [SUREFIRE-1987] Refactor ProviderDetector
48f403e is described below

commit 48f403ead8b8433c746b3ce6e206d1353240c83f
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Wed Jan 26 20:49:58 2022 +0100

    [SUREFIRE-1987] Refactor ProviderDetector
---
 .../surefire/providerapi/ProviderDetector.java     | 66 ++++++++++++----------
 1 file changed, 35 insertions(+), 31 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/surefire/providerapi/ProviderDetector.java b/maven-surefire-common/src/main/java/org/apache/maven/surefire/providerapi/ProviderDetector.java
index caaaa9d..cc9b91d 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/surefire/providerapi/ProviderDetector.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/surefire/providerapi/ProviderDetector.java
@@ -22,8 +22,9 @@ package org.apache.maven.surefire.providerapi;
 import javax.annotation.Nonnull;
 
 import java.io.IOException;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 import org.apache.maven.surefire.api.provider.SurefireProvider;
@@ -32,6 +33,9 @@ import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
 import static java.lang.Thread.currentThread;
+import static java.util.Arrays.stream;
+import static java.util.Collections.emptyList;
+import static java.util.stream.Collectors.toList;
 
 /**
  * @author Kristian Rosenvold
@@ -48,33 +52,37 @@ public final class ProviderDetector
     @Nonnull
     public List<ProviderInfo> resolve( ConfigurableProviderInfo dynamicProvider, ProviderInfo... wellKnownProviders )
     {
-        List<ProviderInfo> providersToRun = new ArrayList<>();
         Set<String> manuallyConfiguredProviders = getManuallyConfiguredProviders();
-        for ( String name : manuallyConfiguredProviders )
+
+        List<ProviderInfo> providersToRun = manuallyConfiguredProviders.stream()
+            .map( name ->
+                findByName( name, wellKnownProviders )
+                    .orElseGet( () -> dynamicProvider.instantiate( name ) ) )
+            .collect( toList() );
+
+        providersToRun.forEach( p -> logger.info( "Using configured provider " + p.getProviderName() ) );
+
+        if ( providersToRun.isEmpty() )
         {
-            ProviderInfo wellKnown = findByName( name, wellKnownProviders );
-            ProviderInfo providerToAdd = wellKnown != null ? wellKnown : dynamicProvider.instantiate( name );
-            logger.info( "Using configured provider " + providerToAdd.getProviderName() );
-            providersToRun.add( providerToAdd );
+            return autoDetectOneWellKnownProvider( wellKnownProviders )
+                .map( Collections::singletonList )
+                .orElse( emptyList() );
+        }
+        else
+        {
+            return Collections.unmodifiableList( providersToRun );
         }
-        return manuallyConfiguredProviders.isEmpty() ? autoDetectOneWellKnownProvider( wellKnownProviders )
-            : providersToRun;
     }
 
-    @Nonnull
-    private List<ProviderInfo> autoDetectOneWellKnownProvider( ProviderInfo... wellKnownProviders )
+    private Optional<ProviderInfo> autoDetectOneWellKnownProvider( ProviderInfo... wellKnownProviders )
     {
-        List<ProviderInfo> providersToRun = new ArrayList<>();
-        for ( ProviderInfo wellKnownProvider : wellKnownProviders )
-        {
-            if ( wellKnownProvider.isApplicable() )
-            {
-                logger.info( "Using auto detected provider " + wellKnownProvider.getProviderName() );
-                providersToRun.add( wellKnownProvider );
-                return providersToRun;
-            }
-        }
-        return providersToRun;
+        Optional<ProviderInfo> providerInfo = stream( wellKnownProviders )
+            .filter( ProviderInfo::isApplicable )
+            .findFirst();
+
+        providerInfo.ifPresent( p -> logger.info( "Using auto detected provider " + p.getProviderName() ) );
+
+        return providerInfo;
     }
 
     private Set<String> getManuallyConfiguredProviders()
@@ -90,15 +98,11 @@ public final class ProviderDetector
         }
     }
 
-    private ProviderInfo findByName( String providerClassName, ProviderInfo... wellKnownProviders )
+    @Nonnull
+    private Optional<ProviderInfo> findByName( String providerClassName, ProviderInfo... wellKnownProviders )
     {
-        for ( ProviderInfo wellKnownProvider : wellKnownProviders )
-        {
-            if ( wellKnownProvider.getProviderName().equals( providerClassName ) )
-            {
-                return wellKnownProvider;
-            }
-        }
-        return null;
+        return stream( wellKnownProviders )
+            .filter( p -> p.getProviderName().equals( providerClassName ) )
+            .findFirst();
     }
 }