CompletableFuture<List<NodeRenderer>> (List<JavaValue> values, DebugProcessImpl process) { List<CompletableFuture<List<NodeRenderer>>> futures = new ArrayList<>(values.size()); for (JavaValue value : values) { if (value instanceof JavaReferringObjectsValue) { // disable for any referrers at all return CompletableFuture.completedFuture(Collections.emptyList()); } ValueDescriptorImpl valueDescriptor = value.getDescriptor(); if (!valueDescriptor.isValueValid()) { return CompletableFuture.completedFuture(Collections.emptyList()); } futures.add(process.getApplicableRenderers(valueDescriptor.getType())); } return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenApply(__ -> { List<NodeRenderer> res = null; for (CompletableFuture<List<NodeRenderer>> future : futures) { List<NodeRenderer> list = future.join(); if (res == null) { res = list; } else { res.retainAll(list); } } return ContainerUtil.notNullize(res); }); }