Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Keller2015-03-10 15:31:09 +0000
committerSzymon Ptaszkiewicz2015-03-25 11:07:13 +0000
commitf334481779d0a0d85761605e516392186acbb789 (patch)
tree863d2315f1a1b0404f493128b4fd099a9a363612
parent74751ade0222e7a1557937bf39817a63ea6c0749 (diff)
downloadeclipse.platform.resources-f334481779d0a0d85761605e516392186acbb789.tar.gz
eclipse.platform.resources-f334481779d0a0d85761605e516392186acbb789.tar.xz
eclipse.platform.resources-f334481779d0a0d85761605e516392186acbb789.zip
Bug 461838 - Resource#accept(IResourceProxyVisitor, int, int) should visit files in alphabetic orderI20150408-1100I20150407-0800I20150331-0800
Change-Id: Ic40c90aa5818ee3be487adaf9b9a410f6be1f0c6 Signed-off-by: Markus Keller <markus_keller@ch.ibm.com>
-rw-r--r--bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeIterator.java6
-rw-r--r--tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java33
2 files changed, 34 insertions, 5 deletions
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeIterator.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeIterator.java
index ed3227ebf..e433df07b 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeIterator.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeIterator.java
@@ -82,7 +82,8 @@ public class ElementTreeIterator implements IPathRequestor {
if (visitor.visitElement(tree, this, node.getData())) {
//recurse
AbstractDataTreeNode[] children = node.getChildren();
- for (int i = children.length; --i >= 0;) {
+ int len = children.length;
+ for (int i = 0; i < len; i++) {
doIteration((DataTreeNode) children[i], visitor);
}
}
@@ -116,7 +117,8 @@ public class ElementTreeIterator implements IPathRequestor {
if (treeRoot == null)
return;
AbstractDataTreeNode[] children = treeRoot.getChildren();
- for (int i = children.length; --i >= 0;) {
+ int len = children.length;
+ for (int i = 0; i < len; i++) {
doIteration((DataTreeNode) children[i], visitor);
}
}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
index db97a7f52..9ef262874 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
@@ -271,7 +271,7 @@ public class IResourceTest extends ResourceTest {
/**
* Returns an array of all projects in the given resource array.
- */
+ */
protected IProject[] getProjects(IResource[] resources) {
ArrayList<IProject> list = new ArrayList<IProject>();
for (int i = 0; i < resources.length; i++) {
@@ -313,8 +313,8 @@ public class IResourceTest extends ResourceTest {
* Returns interesting resource states. */
protected Integer[] interestingStates() {
return new Integer[] {new Integer(S_WORKSPACE_ONLY), new Integer(S_FILESYSTEM_ONLY), new Integer(S_UNCHANGED), new Integer(S_CHANGED), new Integer(S_DOES_NOT_EXIST),
- // new Integer(S_FOLDER_TO_FILE),
- // new Integer(S_FILE_TO_FOLDER),
+ // new Integer(S_FOLDER_TO_FILE),
+ // new Integer(S_FILE_TO_FOLDER),
};
}
@@ -2505,4 +2505,31 @@ public class IResourceTest extends ResourceTest {
// pass
}
}
+
+ // https://bugs.eclipse.org/461838
+ public void testAcceptProxyVisitorAlphabetic() throws CoreException {
+ IProject project = getWorkspace().getRoot().getProject("P");
+ IFolder a = project.getFolder("a");
+ IFile a1 = a.getFile("a1.txt");
+ IFile a2 = a.getFile("a2.txt");
+ IFolder b = a.getFolder("b");
+ IFile b1 = b.getFile("b1.txt");
+ IFile b2 = b.getFile("B2.txt");
+
+ ensureExistsInWorkspace(new IResource[] {project, a, a1, a2, b, b1, b2}, true);
+
+ final List<IResource> actualOrder = new ArrayList<IResource>();
+ IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
+ @Override
+ public boolean visit(IResourceProxy proxy) {
+ actualOrder.add(proxy.requestResource());
+ return true;
+ }
+ };
+
+ project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE);
+
+ List<IResource> expectedOrder = Arrays.asList(project, project.getFile(".project"), a, a1, a2, b, b2, b1);
+ assertEquals("1.0", expectedOrder.toString(), actualOrder.toString());
+ }
}

Back to the top