diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookCache.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookCache.java index 2f48d8b650..e5a3b65c76 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookCache.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookCache.java @@ -19,6 +19,9 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.inject.name.Named; + +import java.util.List; +import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -56,11 +59,17 @@ public void invalidateAll() { /** Invalidates only non-implicit copybook cache */ public void invalidateAllNonImplicit() { - cache.invalidateAll( + List toInvalidate = cache.asMap().entrySet().stream() - .filter(entry -> entry.getValue().getUri() != null) - .filter(entry -> !ImplicitCodeUtils.isImplicit(entry.getValue().getUri())) - .collect(Collectors.toList())); + .filter(this::shouldInvalidate) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + cache.invalidateAll(toInvalidate); + } + + private boolean shouldInvalidate(Map.Entry entry) { + CopybookModel model = entry.getValue(); + return model.getUri() == null || !ImplicitCodeUtils.isImplicit(model.getUri()); } /**