diff --git a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java index 69c5e408513..5b72b5727ec 100644 --- a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java +++ b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java @@ -430,9 +430,10 @@ public HashMap getLinks() { * Returns the map of filter descriptions (IPath (project relative path) -> * {@literal LinkedList}). Since this method is only used * internally, it never creates a copy. Returns null if the project does not - * have any filtered resources. + * have any filtered resources. Only the read of the reference is guarded, + * the returned map itself is not. */ - public HashMap> getFilters() { + synchronized public HashMap> getFilters() { return filterDescriptions; } diff --git a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java index 1794caf1def..94bfe274d0c 100644 --- a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java +++ b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java @@ -2086,7 +2086,7 @@ public IFileInfo[] filterChildren(IFileInfo[] list, boolean throwException) thro return list; } final ProjectDescription description = project.internalGetDescription(); - if (description == null) { + if (description == null || description.getFilters() == null) { return list; } return filterChildren(project, description, list, throwException);