if (!channel.isActive()) {
CompletableFuture<Channel> currentFuture;
synchronized (channelPool) {
currentFuture = channelPool.get(offset);
if (currentFuture == finalFuture) { // final future is not null since it is used also before
channelPool.set(offset, null);
} else if (currentFuture == null) {
currentFuture = factory.apply(address); // <== assigned here
currentFuture.whenComplete(this::logConnection); // <== used here
channelPool.set(offset, currentFuture);
}
}
if (currentFuture == finalFuture) {
getChannel(address, messageType)
.whenComplete(
(recursiveResult, recursiveError) -> {
completeFuture(future, recursiveResult, recursiveError);
});
} else {
currentFuture.whenComplete( // <== can't be null here
Description of the false positive
We can see that if currentFuture is null then it is assigned a new value, which is used directly afterwards, which means it cant be null later. URL to the alert on the project page on LGTM.com https://lgtm.com/projects/g/zeebe-io/zeebe/snapshot/e722021d676bdbeee3366fa1c10a915f031bbf0c/files/atomix/cluster/src/main/java/io/atomix/cluster/messaging/impl/ChannelPool.java?sort=name&dir=ASC&mode=heatmap#xa937c5d4af2d26c1:1