From 55cbac27413c425c7630020db44eb30dddbd6347 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 4 Nov 2015 15:34:16 +0100 Subject: [PATCH] assert that files returned by IndexableSetContributor are valid --- .../indexing/IndexableSetContributor.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/platform/indexing-api/src/com/intellij/util/indexing/IndexableSetContributor.java b/platform/indexing-api/src/com/intellij/util/indexing/IndexableSetContributor.java index e4ba52e1cbcb..cc6675e51f5b 100644 --- a/platform/indexing-api/src/com/intellij/util/indexing/IndexableSetContributor.java +++ b/platform/indexing-api/src/com/intellij/util/indexing/IndexableSetContributor.java @@ -17,6 +17,7 @@ package com.intellij.util.indexing; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.NotNullFunction; @@ -74,7 +75,7 @@ public abstract class IndexableSetContributor implements IndexedRootsProvider { /** * @return an additional project-dependent set of {@link VirtualFile} instances to index, - * the returned set should not contain nulls + * the returned set should not contain nulls or invalid files */ @NotNull public Set getAdditionalProjectRootsToIndex(@NotNull Project project) { @@ -83,7 +84,7 @@ public abstract class IndexableSetContributor implements IndexedRootsProvider { /** * @return an additional project-independent set of {@link VirtualFile} instances to index, - * the returned set should not contain nulls + * the returned set should not contain nulls or invalid files */ @NotNull public abstract Set getAdditionalRootsToIndex(); @@ -93,12 +94,16 @@ public abstract class IndexableSetContributor implements IndexedRootsProvider { @NotNull String methodInfo, @NotNull Set roots) { for (VirtualFile root : roots) { - if (root == null) { + if (root == null || !root.isValid()) { LOG.error("Please fix " + contributor.getClass().getName() + "#" + methodInfo + ".\n" + - "The returned set is not expected to contain nulls, but it is " + roots); - Set result = ContainerUtil.newHashSet(roots.size()); - ContainerUtil.addAllNotNull(result, roots); - return result; + (root == null ? "The returned set is not expected to contain nulls, but it is " + roots + : "Invalid file returned: " + root)); + return ContainerUtil.newLinkedHashSet(ContainerUtil.filter(roots, new Condition() { + @Override + public boolean value(VirtualFile virtualFile) { + return virtualFile != null && virtualFile.isValid(); + } + })); } } return roots;