(super.listIterator(index), set);
}
+ /**
+ * {@inheritDoc}
+ *
+ * NOTE: from 4.0, an unmodifiable list will be returned, as changes to the
+ * subList can invalidate the parent list.
+ */
@Override
public List subList(final int fromIndex, final int toIndex) {
final List superSubList = super.subList(fromIndex, toIndex);
final Set subSet = createSetBasedOnList(set, superSubList);
- return new SetUniqueList(superSubList, subSet);
+ return ListUtils.unmodifiableList(new SetUniqueList(superSubList, subSet));
}
/**
diff --git a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
index 4c818f9dd..bbe546ed8 100644
--- a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
+++ b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
@@ -43,6 +43,7 @@ public class SetUniqueListTest extends AbstractListTest {
return new SetUniqueList(new ArrayList(), new HashSet());
}
+ //-----------------------------------------------------------------------
@Override
public void testListIteratorSet() {
// override to block
@@ -461,6 +462,16 @@ public class SetUniqueListTest extends AbstractListTest {
assertEquals(4, decoratedList.size());
}
+ public void testSubListIsUnmodifiable() {
+ resetFull();
+ List subList = getCollection().subList(1, 3);
+ try {
+ subList.remove(0);
+ fail("subList should be unmodifiable");
+ } catch (UnsupportedOperationException e) {
+ // expected
+ }
+ }
@SuppressWarnings("unchecked")
public void testCollections307() {
List list = new ArrayList();