diff options
author | stephenramthun <stephenramthun@gmail.com> | 2018-02-04 22:45:55 +0100 |
---|---|---|
committer | stephenramthun <stephenramthun@gmail.com> | 2018-02-04 22:45:55 +0100 |
commit | ae442842668f9414f3a5fd8a294968d7cddf147f (patch) | |
tree | 53a7aed9bb070bd8dcc88b18b3ee35f1c9e5b0a4 | |
parent | 9f20df294175a8dcc2f0c1331c818589c5de9cb4 (diff) | |
download | javaparser-ae442842668f9414f3a5fd8a294968d7cddf147f.tar.gz |
Add removeFirst and removeLast to NodeList.
Issue #1389
-rw-r--r-- | javaparser-core/src/main/java/com/github/javaparser/ast/NodeList.java | 21 | ||||
-rw-r--r-- | javaparser-testing/src/test/java/com/github/javaparser/ast/NodeListTest.java | 60 |
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()); } } |