You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/12/20 23:05:20 UTC
svn commit: r1552816 - in /jackrabbit/oak/trunk/oak-commons/src:
main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
Author: mduerig
Date: Fri Dec 20 22:05:19 2013
New Revision: 1552816
URL: http://svn.apache.org/r1552816
Log:
OAK-1302: PathUtils.elements returns stale iterator on subsequent calls to iterator()
Return a fresh iterator instance on each call to iterator()
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
Modified: jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java?rev=1552816&r1=1552815&r2=1552816&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java (original)
+++ jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java Fri Dec 20 22:05:19 2013
@@ -215,48 +215,46 @@ public final class PathUtils {
public static Iterable<String> elements(final String path) {
assert isValid(path) : "Invalid path ["+path+"]";
- final Iterator<String> it = new Iterator<String>() {
- int pos = PathUtils.isAbsolute(path) ? 1 : 0;
- String next;
-
+ return new Iterable<String>() {
@Override
- public boolean hasNext() {
- if (next == null) {
- if (pos >= path.length()) {
- return false;
- }
- int i = path.indexOf('/', pos);
- if (i < 0) {
- next = path.substring(pos);
- pos = path.length();
- } else {
- next = path.substring(pos, i);
- pos = i + 1;
+ public Iterator<String> iterator() {
+ return new Iterator<String>() {
+ int pos = isAbsolute(path) ? 1 : 0;
+ String next;
+
+ @Override
+ public boolean hasNext() {
+ if (next == null) {
+ if (pos >= path.length()) {
+ return false;
+ }
+ int i = path.indexOf('/', pos);
+ if (i < 0) {
+ next = path.substring(pos);
+ pos = path.length();
+ } else {
+ next = path.substring(pos, i);
+ pos = i + 1;
+ }
+ }
+ return true;
}
- }
- return true;
- }
-
- @Override
- public String next() {
- if (hasNext()) {
- String next = this.next;
- this.next = null;
- return next;
- }
- throw new NoSuchElementException();
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException("remove");
- }
- };
+ @Override
+ public String next() {
+ if (hasNext()) {
+ String next = this.next;
+ this.next = null;
+ return next;
+ }
+ throw new NoSuchElementException();
+ }
- return new Iterable<String>() {
- @Override
- public Iterator<String> iterator() {
- return it;
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("remove");
+ }
+ };
}
};
}
Modified: jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java?rev=1552816&r1=1552815&r2=1552816&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java (original)
+++ jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java Fri Dec 20 22:05:19 2013
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.common
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
+import org.junit.Assert;
import org.junit.Test;
/**
@@ -458,4 +459,21 @@ public class PathUtilsTest extends TestC
}
}
+ public void testElements() {
+ String path = "a/b/c";
+ String[] elementsArray = path.split("/");
+ Iterable<String> elementsIterable = PathUtils.elements(path);
+ int k = 0;
+ for (String name : elementsIterable) {
+ Assert.assertEquals(elementsArray[k++], name);
+ }
+ assertEquals(3, k);
+
+ k = 0;
+ for (String name : elementsIterable) {
+ Assert.assertEquals(elementsArray[k++], name);
+ }
+ assertEquals(3, k);
+ }
+
}