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]
