### Eclipse Workspace Patch 1.0 #P org.eclipse.core.resources Index: src/org/eclipse/core/internal/localstore/UnifiedTree.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java,v retrieving revision 1.51 diff -u -r1.51 UnifiedTree.java --- src/org/eclipse/core/internal/localstore/UnifiedTree.java 15 Oct 2009 17:22:02 -0000 1.51 +++ src/org/eclipse/core/internal/localstore/UnifiedTree.java 10 Mar 2010 20:41:41 -0000 @@ -341,7 +341,7 @@ IFileInfo[] list = fileTree != null ? fileTree.getChildInfos(store) : store.childInfos(EFS.NONE, null); if (list == null) return NO_CHILDREN; - list = ((Resource) node.getResource()).filterChildren(list); + list = ((Resource) node.getResource()).filterChildren(list, false); int size = list.length; if (size > 1) quickSort(list, 0, size - 1); Index: src/org/eclipse/core/internal/resources/Resource.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java,v retrieving revision 1.187 diff -u -r1.187 Resource.java --- src/org/eclipse/core/internal/resources/Resource.java 10 Mar 2010 16:27:17 -0000 1.187 +++ src/org/eclipse/core/internal/resources/Resource.java 10 Mar 2010 20:41:43 -0000 @@ -17,6 +17,8 @@ *******************************************************************************/ package org.eclipse.core.internal.resources; +import org.eclipse.core.runtime.IStatus; + import org.eclipse.core.resources.IPathVariableManager; import java.net.URI; @@ -2041,6 +2043,15 @@ * @see IResource#isFiltered() */ public boolean isFiltered() { + try { + return isFilteredWithException(false); + } catch (CoreException e) { + // nothing + } + return false; + } + + public boolean isFilteredWithException(boolean throwExeception) throws CoreException { if (isLinked() || isVirtual()) return false; Resource currentResource = this; @@ -2057,7 +2068,7 @@ info.setDirectory(currentResource.getType() == IResource.FOLDER); fileInfo = info; } - IFileInfo[] filtered = parent.filterChildren(new IFileInfo[] {fileInfo}); + IFileInfo[] filtered = parent.filterChildren(new IFileInfo[] {fileInfo}, throwExeception); if (filtered.length == 0) return true; } @@ -2067,7 +2078,7 @@ return false; } - public IFileInfo[] filterChildren(IFileInfo[] list) { + public IFileInfo[] filterChildren(IFileInfo[] list, boolean throwExeception) throws CoreException { IPath relativePath = getProjectRelativePath(); Project project = (Project) getProject(); if ((project != null) && (relativePath != null)) { @@ -2124,7 +2135,8 @@ try { list = Filter.filter(project, currentIncludeFilters, currentExcludeFilters, (IContainer) this, list); } catch (CoreException e) { - // no handling, error has already been logged + if (throwExeception) + throw e; } } } Index: src/org/eclipse/core/internal/resources/Workspace.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java,v retrieving revision 1.233 diff -u -r1.233 Workspace.java --- src/org/eclipse/core/internal/resources/Workspace.java 5 Mar 2010 16:08:18 -0000 1.233 +++ src/org/eclipse/core/internal/resources/Workspace.java 10 Mar 2010 20:41:44 -0000 @@ -13,6 +13,11 @@ *******************************************************************************/ package org.eclipse.core.internal.resources; +import org.eclipse.core.runtime.CoreException; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IStatus; + import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -2300,4 +2305,17 @@ if (!status[0].isOK()) throw new ResourceException(status[0]); } + + /* (non-Javadoc) + * @see IWorkspace#validateFiltered(IResource) + */ + public IStatus validateFiltered(IResource resource) { + try { + if (((Resource) resource).isFilteredWithException(true)) + return new ResourceStatus(IStatus.ERROR, Messages.resources_errorResourceIsFiltered); + } catch (CoreException e) { + // if we can't validate it, we return OK + } + return Status.OK_STATUS; + } } Index: src/org/eclipse/core/internal/utils/Messages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.java,v retrieving revision 1.43 diff -u -r1.43 Messages.java --- src/org/eclipse/core/internal/utils/Messages.java 4 Mar 2010 23:02:51 -0000 1.43 +++ src/org/eclipse/core/internal/utils/Messages.java 10 Mar 2010 20:41:44 -0000 @@ -287,6 +287,7 @@ public static String resources_workspaceOpen; public static String resources_writeMeta; public static String resources_writeWorkspaceMeta; + public static String resources_errorResourceIsFiltered; public static String synchronizer_partnerNotRegistered; Index: src/org/eclipse/core/internal/utils/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/messages.properties,v retrieving revision 1.141 diff -u -r1.141 messages.properties --- src/org/eclipse/core/internal/utils/messages.properties 4 Mar 2010 23:02:51 -0000 1.141 +++ src/org/eclipse/core/internal/utils/messages.properties 10 Mar 2010 20:41:44 -0000 @@ -286,6 +286,7 @@ resources_workspaceOpen = The workspace is already open. resources_writeMeta = Could not write metadata for ''{0}''. resources_writeWorkspaceMeta = Could not write workspace metadata ''{0}''. +resources_errorResourceIsFiltered=The resource will be filtered out by its parent resource filters synchronizer_partnerNotRegistered = Sync partner: {0} not registered with the synchronizer. Index: src/org/eclipse/core/resources/IResource.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java,v retrieving revision 1.114 diff -u -r1.114 IResource.java --- src/org/eclipse/core/resources/IResource.java 5 Mar 2010 16:08:18 -0000 1.114 +++ src/org/eclipse/core/resources/IResource.java 10 Mar 2010 20:41:46 -0000 @@ -1742,6 +1742,7 @@ * @return true if this resource would filtered, and * false otherwise * @since 3.6 + * @noreference This method is not intended to be referenced by clients. */ public boolean isFiltered(); Index: src/org/eclipse/core/resources/IWorkspace.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspace.java,v retrieving revision 1.88 diff -u -r1.88 IWorkspace.java --- src/org/eclipse/core/resources/IWorkspace.java 18 Nov 2009 21:54:05 -0000 1.88 +++ src/org/eclipse/core/resources/IWorkspace.java 10 Mar 2010 20:41:47 -0000 @@ -1391,6 +1391,38 @@ public IStatus validateEdit(IFile[] files, Object context); /** + * Validates that the given resource will not (or would not, if the resource + * doesn't exist in the workspace yet) be filtered out from the workspace by + * its parent resource filters. + *

+ * Note that if the resource or its parent doesn't exist yet in the workspace, + * it is possible that it will still be effectively filtered out once the resource + * and/or its parent is created, even though this validation doesn't report it. + * + * But this validation reports the resource as filtered, even though it, or its + * parent, doesn't exist in the workspace yet, it will mean that the resource will, + * without any further change, be filtered out by its parent resource filters once + * it exist in the workspace. + *

+ *

+ * This method will return a status with severity IStatus.ERROR + * if the resource will be filtered out - removed - out of the workspace by + * its parent resource filters. + *

+ *

+ * Note: linked resources and virtual folders are never filtered out by their + * parent resource filters. + * + * @param resource the resource to validate the location for + * @return a status object with code IStatus.OK if the given + * resource is not filtered by its parent resource filters, otherwise a status + * object with severity IStatus.ERROR indicating that it will + * @see IStatus#OK + * @since 3.6 + */ + public IStatus validateFiltered(IResource resource); + + /** * Validates the given path as the location of the given resource on disk. * The path must be either an absolute file system path, or a relative path * whose first segment is the name of a defined workspace path variable. In