diff options
| author | Markus Keller | 2015-03-10 15:31:09 +0000 |
|---|---|---|
| committer | Szymon Ptaszkiewicz | 2015-03-25 11:07:13 +0000 |
| commit | f334481779d0a0d85761605e516392186acbb789 (patch) | |
| tree | 863d2315f1a1b0404f493128b4fd099a9a363612 | |
| parent | 74751ade0222e7a1557937bf39817a63ea6c0749 (diff) | |
| download | eclipse.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>
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()); + } } |
