aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephenramthun <stephenramthun@gmail.com>2018-02-04 22:45:55 +0100
committerstephenramthun <stephenramthun@gmail.com>2018-02-04 22:45:55 +0100
commitae442842668f9414f3a5fd8a294968d7cddf147f (patch)
tree53a7aed9bb070bd8dcc88b18b3ee35f1c9e5b0a4
parent9f20df294175a8dcc2f0c1331c818589c5de9cb4 (diff)
downloadjavaparser-ae442842668f9414f3a5fd8a294968d7cddf147f.tar.gz
Add removeFirst and removeLast to NodeList.
Issue #1389
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java21
-rw-r--r--javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java60
2 files changed, 73 insertions, 8 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
index 3fd0a4419..b13344bee 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java
@@ -87,6 +87,27 @@ public class NodeList<N extends Node> implements List<N>, Iterable<N>, HasParent
return innerList.remove(node);
}
+ public boolean removeFirst() {
+ if (innerList.size() < 1) {
+ return false;
+ }
+ Node node = innerList.get(0);
+ notifyElementRemoved(0, node);
+ node.setParentNode(null);
+ return innerList.remove(0) != null;
+ }
+
+ public boolean removeLast() {
+ if (innerList.size() < 1) {
+ return false;
+ }
+ int index = innerList.size() - 1;
+ Node node = innerList.get(index);
+ notifyElementRemoved(index, node);
+ node.setParentNode(null);
+ return innerList.remove(index) != null;
+ }
+
@SafeVarargs
public static <X extends Node> NodeList<X> nodeList(X... nodes) {
final NodeList<X> nodeList = new NodeList<>();
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java b/javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java
index d8fe3d6c3..5d2fd8680 100644
--- a/javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java
+++ b/javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java
@@ -38,6 +38,8 @@ import java.util.List;
import static com.github.javaparser.ast.NodeList.nodeList;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
public class NodeListTest {
@@ -138,6 +140,48 @@ public class NodeListTest {
}
@Test
+ public void removeFirstNode() {
+ List<String> changes = new LinkedList<>();
+ String code = "class A { int a; int b; int c; int d; int e; }";
+ CompilationUnit cu = JavaParser.parse(code);
+ ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get();
+ cd.getMembers().register(createObserver(changes));
+
+ cd.getMembers().removeFirst();
+ assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0"), changes);
+ assertEquals(cd.getMembers().size(), 4);
+
+ for (int i = 3; i >= 0; i--) {
+ assertTrue(cd.getMembers().removeFirst());
+ assertEquals(cd.getMembers().size(), i);
+ }
+
+ assertFalse(cd.getMembers().removeFirst());
+ assertEquals(cd.getMembers().size(), 0);
+ }
+
+ @Test
+ public void removeLastNode() {
+ List<String> changes = new LinkedList<>();
+ String code = "class A { int a; int b; int c; int d; int e; }";
+ CompilationUnit cu = JavaParser.parse(code);
+ ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get();
+ cd.getMembers().register(createObserver(changes));
+
+ cd.getMembers().removeLast();
+ assertEquals(Arrays.asList("'int e;' REMOVAL in list at 4"), changes);
+ assertEquals(cd.getMembers().size(), 4);
+
+ for (int i = 3; i >= 0; i--) {
+ assertTrue(cd.getMembers().removeLast());
+ assertEquals(cd.getMembers().size(), i);
+ }
+
+ assertFalse(cd.getMembers().removeLast());
+ assertEquals(cd.getMembers().size(), 0);
+ }
+
+ @Test
public void removeObject() {
List<String> changes = new LinkedList<>();
String code = "class A { int a; int b; int c; int d; int e; }";
@@ -226,22 +270,22 @@ public class NodeListTest {
assertEquals("[abc, bcd, cde]", list.toString());
}
-
+
@Test
public void addFirst() {
final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), new Name("cde"));
list.addFirst(new Name("xxx"));
-
+
assertEquals("[xxx, abc, bcd, cde]", list.toString());
}
-
+
@Test
public void addLast() {
final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), new Name("cde"));
list.addLast(new Name("xxx"));
-
+
assertEquals("[abc, bcd, cde, xxx]", list.toString());
}
@@ -251,7 +295,7 @@ public class NodeListTest {
final NodeList<Name> list = nodeList(new Name("abc"), n, new Name("cde"));
list.addBefore(new Name("xxx"), n);
-
+
assertEquals("[abc, xxx, bcd, cde]", list.toString());
}
@@ -261,7 +305,7 @@ public class NodeListTest {
final NodeList<Name> list = nodeList(new Name("abc"), n, new Name("cde"));
list.addAfter(new Name("xxx"), n);
-
+
assertEquals("[abc, bcd, xxx, cde]", list.toString());
}
@@ -271,7 +315,7 @@ public class NodeListTest {
final NodeList<Name> list = nodeList(abc, new Name("bcd"), new Name("cde"));
list.addBefore(new Name("xxx"), abc);
-
+
assertEquals("[xxx, abc, bcd, cde]", list.toString());
}
@@ -281,7 +325,7 @@ public class NodeListTest {
final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), cde);
list.addAfter(new Name("xxx"), cde);
-
+
assertEquals("[abc, bcd, cde, xxx]", list.toString());
}
}