From 2da17191d1d6136b6fe4f4cc21cf3a8d14224779 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Wed, 26 Jan 2022 20:49:58 +0100 Subject: [PATCH] [SUREFIRE-1987] Refactor ProviderDetector --- .../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 caaaa9d930..cc9b91dd07 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 @@ 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.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 resolve( ConfigurableProviderInfo dynamicProvider, ProviderInfo... wellKnownProviders ) { - List providersToRun = new ArrayList<>(); Set manuallyConfiguredProviders = getManuallyConfiguredProviders(); - for ( String name : manuallyConfiguredProviders ) + + List 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 autoDetectOneWellKnownProvider( ProviderInfo... wellKnownProviders ) + private Optional autoDetectOneWellKnownProvider( ProviderInfo... wellKnownProviders ) { - List 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 = stream( wellKnownProviders ) + .filter( ProviderInfo::isApplicable ) + .findFirst(); + + providerInfo.ifPresent( p -> logger.info( "Using auto detected provider " + p.getProviderName() ) ); + + return providerInfo; } private Set getManuallyConfiguredProviders() @@ -90,15 +98,11 @@ private Set getManuallyConfiguredProviders() } } - private ProviderInfo findByName( String providerClassName, ProviderInfo... wellKnownProviders ) + @Nonnull + private Optional 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(); } }