### 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