Cover against a null source provided by a Guice Element

We are observing an edge case where a Guice Element returns a `null`
source, see the reference of he error below.

```
Caused by: java.lang.NullPointerException
	at org.springframework.guice.annotation.ModuleRegistryConfiguration.lambda$null$0(ModuleRegistryConfiguration.java:197)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
	at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
	at org.springframework.guice.annotation.ModuleRegistryConfiguration.lambda$postProcessBeanDefinitionRegistry$1(ModuleRegistryConfiguration.java:197)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at org.springframework.guice.annotation.ModuleRegistryConfiguration.postProcessBeanDefinitionRegistry(ModuleRegistryConfiguration.java:198)
```
This commit is contained in:
Bernardo Gomez Palacio
2019-11-18 11:46:00 -08:00
committed by Taylor Wicksell
parent 61b3ac9c8d
commit 1a40634c10

View File

@@ -52,6 +52,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
@@ -109,7 +111,7 @@ class ModuleRegistryConfiguration
for (Entry<Key<?>, Binding<?>> entry : bindings.entrySet()) {
if (entry.getKey().getTypeLiteral().getRawType().equals(Injector.class)
|| SpringModule.SPRING_GUICE_SOURCE
.equals(entry.getValue().getSource().toString())) {
.equals(Optional.ofNullable(entry.getValue().getSource()).map(Object::toString).orElse(""))) {
continue;
}
if (entry.getKey().getAnnotationType() != null &&
@@ -132,7 +134,7 @@ class ModuleRegistryConfiguration
if(!Scopes.isSingleton(binding)) {
bean.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
}
if (source != null && source instanceof ElementSource) {
if (source instanceof ElementSource) {
bean.setResourceDescription(
((ElementSource) source).getDeclaringSource().toString());
}
@@ -193,8 +195,8 @@ class ModuleRegistryConfiguration
String[] modulesToFilter = applicationContext.getEnvironment()
.getProperty("spring.guice.modules.exclude").split(",");
elements = elements.stream()
.filter(e -> !Arrays.stream(modulesToFilter)
.filter(ex -> (e.getSource().toString().contains(ex))).findFirst().isPresent())
.filter(e -> Arrays.stream(modulesToFilter)
.noneMatch(ex -> (Optional.ofNullable(e.getSource()).map(Object::toString).orElse("").contains(ex))))
.collect(Collectors.toList());
modules = Collections.singletonList(Elements.getModule(elements));
}
@@ -268,10 +270,10 @@ class ModuleRegistryConfiguration
Binding<?> compareTo = (Binding<?>) obj;
if (compareTo.getSource() != null && this.binding != null) {
return binding.equals(compareTo)
&& binding.getSource().equals(compareTo.getSource());
&& Objects.equals(binding.getSource(), compareTo.getSource());
}
else {
return binding.equals(compareTo);
return Objects.equals(binding, compareTo);
}
}
else {