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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 07aa858a35e50e5bc141e8031fbf8aa7f3b0db9d
Author: Benoit Tellier <[email protected]>
AuthorDate: Sat Sep 21 07:47:18 2019 +0700

    JAMES-2866 Warn upon ambiguous naming scheme
---
 .../org/apache/james/utils/GuiceGenericLoader.java    | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git 
a/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
 
b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
index 71fd966..7bdec59 100644
--- 
a/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
+++ 
b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
@@ -21,9 +21,13 @@ package org.apache.james.utils;
 
 import java.util.stream.Stream;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableList;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
@@ -31,6 +35,7 @@ import com.google.inject.Module;
 import com.google.inject.util.Modules;
 
 public class GuiceGenericLoader {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(GuiceGenericLoader.class);
     private static final Module NO_CHILD_MODULE = binder -> { };
 
     @VisibleForTesting
@@ -58,10 +63,18 @@ public class GuiceGenericLoader {
         }
 
         private Class<T> locateClass(ClassName className, NamingScheme 
namingScheme) throws ClassNotFoundException {
-            return namingScheme.toFullyQualifiedClassNames(className)
+            ImmutableList<Class<T>> classes = 
namingScheme.toFullyQualifiedClassNames(className)
                 .flatMap(this::tryLocateClass)
-                .findFirst()
-                .orElseThrow(() -> new 
ClassNotFoundException(className.getName()));
+                .collect(Guavate.toImmutableList());
+
+            if (classes.size() == 0) {
+                throw new ClassNotFoundException(className.getName());
+            }
+            if (classes.size() > 1) {
+                LOGGER.warn("Ambiguous class name for {}. Corresponding 
classes are {} and {} will be loaded",
+                    className, classes, classes.get(0));
+            }
+            return classes.get(0);
         }
 
         private Stream<Class<T>> tryLocateClass(FullyQualifiedClassName 
className) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to