176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti/* 276f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser. 376f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team. 476f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 576f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * This file is part of JavaParser. 676f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 776f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * JavaParser can be used either under the terms of 876f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * a) the GNU Lesser General Public License as published by 976f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * the Free Software Foundation, either version 3 of the License, or 1076f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * (at your option) any later version. 1176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * b) the terms of the Apache License 1276f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 1376f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and 1476f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * LICENCE.APACHE. Please refer to those files for details. 1576f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 1676f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * JavaParser is distributed in the hope that it will be useful, 1776f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of 1876f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1976f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * GNU Lesser General Public License for more details. 2076f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti */ 2176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti 223e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettipackage com.github.javaparser.ast; 233e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 243e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.JavaParser; 253e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; 263e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.body.FieldDeclaration; 27f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggenimport com.github.javaparser.ast.expr.Name; 2824a58469927e0faee2d29a628467e998ed491449Danny van Bruggenimport com.github.javaparser.ast.expr.SimpleName; 290f8bbe61c2d7132846b8ad13804ae70d62c5c8bcDanny van Bruggenimport com.github.javaparser.ast.observer.AstObserver; 300f8bbe61c2d7132846b8ad13804ae70d62c5c8bcDanny van Bruggenimport com.github.javaparser.ast.observer.ObservableProperty; 313e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.type.PrimitiveType; 323e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport org.junit.Test; 333e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 344296abb695b767f7471dd255d0679516183b062aDanny van Bruggenimport java.util.Arrays; 354296abb695b767f7471dd255d0679516183b062aDanny van Bruggenimport java.util.EnumSet; 364296abb695b767f7471dd255d0679516183b062aDanny van Bruggenimport java.util.LinkedList; 374296abb695b767f7471dd255d0679516183b062aDanny van Bruggenimport java.util.List; 383e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 39f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggenimport static com.github.javaparser.ast.NodeList.nodeList; 403e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport static org.junit.Assert.assertEquals; 41ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthunimport static org.junit.Assert.assertFalse; 42ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthunimport static org.junit.Assert.assertTrue; 433e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 443e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettipublic class NodeListTest { 453e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 463e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti private AstObserver createObserver(List<String> changes) { 473e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti return new AstObserver() { 483e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 493e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) { 504296abb695b767f7471dd255d0679516183b062aDanny van Bruggen changes.add(String.format("change of property %s for %s: from '%s' to '%s'", property, observedNode, oldValue, newValue)); 513e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 523e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 533e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 543e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void parentChange(Node observedNode, Node previousParent, Node newParent) { 553e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti changes.add(String.format("setting parent for %s: was %s, now is %s", observedNode, previousParent, newParent)); 563e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 573e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 583e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 593e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved) { 60c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti changes.add(String.format("'%s' %s in list at %d", nodeAddedOrRemoved, type, index)); 613e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 620d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti 630d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti @Override 640d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti public void listReplacement(NodeList observedNode, int index, Node oldNode, Node newNode) { 650d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti changes.add(String.format("'%s' %s in list at %d", oldNode, ListChangeType.REMOVAL, index)); 660d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti changes.add(String.format("'%s' %s in list at %d", newNode, ListChangeType.ADDITION, index)); 670d8f8e5cc0e48d0cc27cf070155ab318fe160a00Federico Tomassetti } 683e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti }; 693e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 703e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 713e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti private FieldDeclaration createIntField(String name) { 7215c2aa05f936720e8f7efdedbbc68450a6f27fb3Danny van Bruggen return new FieldDeclaration(EnumSet.noneOf(Modifier.class), PrimitiveType.intType(), name); 733e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 743e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 753e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Test 763e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void addAllWithoutIndex() { 773e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti List<String> changes = new LinkedList<>(); 783e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti String code = "class A { void foo(int p) { }}"; 793e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 801ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 813e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti cd.getMembers().register(createObserver(changes)); 823e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 833e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti cd.getMembers().addAll(Arrays.asList(createIntField("a"), createIntField("b"), createIntField("c"))); 84c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti assertEquals(Arrays.asList("'int a;' ADDITION in list at 1", 85c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int b;' ADDITION in list at 2", 86c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int c;' ADDITION in list at 3"), changes); 873e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 88150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti 89150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti @Test 90150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti public void addAllWithIndex() { 91150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti List<String> changes = new LinkedList<>(); 92150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti String code = "class A { void foo(int p) { }}"; 93150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 941ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 95150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti cd.getMembers().register(createObserver(changes)); 96150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti 97150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti cd.getMembers().addAll(0, Arrays.asList(createIntField("a"), createIntField("b"), createIntField("c"))); 98c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti assertEquals(Arrays.asList("'int a;' ADDITION in list at 0", 99c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int b;' ADDITION in list at 1", 100c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int c;' ADDITION in list at 2"), changes); 101150ecb8efecf1bbe22f23e6e2869ef4f59fe3523Federico Tomassetti } 1024a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti 1034a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti @Test 1044a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti public void clear() { 1054a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti List<String> changes = new LinkedList<>(); 1064a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti String code = "class A { int a; int b; int c; }"; 1074a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti CompilationUnit cu = JavaParser.parse(code); 1081ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 1094a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti cd.getMembers().register(createObserver(changes)); 1104a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti 1114a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti cd.getMembers().clear(); 112c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0", 113c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int b;' REMOVAL in list at 0", 114c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int c;' REMOVAL in list at 0"), changes); 115c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti } 116c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti 117c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti @Test 118c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti public void set() { 119c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti List<String> changes = new LinkedList<>(); 120c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti String code = "class A { int a; int b; int c; }"; 121c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 1221ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 123c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti cd.getMembers().register(createObserver(changes)); 124c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti 125c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti cd.getMembers().set(1, createIntField("d")); 126c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti assertEquals(Arrays.asList("'int b;' REMOVAL in list at 1", 127c7d2927625db7201d35d891e1751c91edfebd285Federico Tomassetti "'int d;' ADDITION in list at 1"), changes); 1284a25ff22c5db52fe1f21f8939e4a47a73ff2f61bFederico Tomassetti } 129ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 130ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti @Test 131ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti public void removeNode() { 132ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti List<String> changes = new LinkedList<>(); 133ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti String code = "class A { int a; int b; int c; int d; int e; }"; 134ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 1351ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 136ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti cd.getMembers().register(createObserver(changes)); 137ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 1381ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen cd.getMembers().remove(cd.getFieldByName("c").get()); 139ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti assertEquals(Arrays.asList("'int c;' REMOVAL in list at 2"), changes); 140ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti } 141ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 142ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti @Test 143ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun public void removeFirstNode() { 144ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun List<String> changes = new LinkedList<>(); 145ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun String code = "class A { int a; int b; int c; int d; int e; }"; 146ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun CompilationUnit cu = JavaParser.parse(code); 147ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 148ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun cd.getMembers().register(createObserver(changes)); 149ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 150ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun cd.getMembers().removeFirst(); 151ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0"), changes); 152ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), 4); 153ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 154ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun for (int i = 3; i >= 0; i--) { 155e217cb36a3454afa75a14896f5cd85fb1c0d83f6stephenramthun assertTrue(cd.getMembers().removeFirst() != null); 156ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), i); 157ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun } 158ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 159ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), 0); 160ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun } 161ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 162ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun @Test 163ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun public void removeLastNode() { 164ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun List<String> changes = new LinkedList<>(); 165ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun String code = "class A { int a; int b; int c; int d; int e; }"; 166ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun CompilationUnit cu = JavaParser.parse(code); 167ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 168ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun cd.getMembers().register(createObserver(changes)); 169ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 170ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun cd.getMembers().removeLast(); 171ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(Arrays.asList("'int e;' REMOVAL in list at 4"), changes); 172ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), 4); 173ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 174ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun for (int i = 3; i >= 0; i--) { 175e217cb36a3454afa75a14896f5cd85fb1c0d83f6stephenramthun assertTrue(cd.getMembers().removeLast() != null); 176ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), i); 177ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun } 178ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 179ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun assertEquals(cd.getMembers().size(), 0); 180ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun } 181ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 182ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun @Test 183ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti public void removeObject() { 184ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti List<String> changes = new LinkedList<>(); 185ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti String code = "class A { int a; int b; int c; int d; int e; }"; 186ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 1871ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 188ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti cd.getMembers().register(createObserver(changes)); 189ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 190ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti cd.getMembers().remove("hi"); 191ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti assertEquals(Arrays.asList(), changes); 192ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti } 193ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 194ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti @Test 195ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti public void removeAll() { 196ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti List<String> changes = new LinkedList<>(); 197ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti String code = "class A { int a; int b; int c; int d; int e; }"; 198ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 1991ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 200ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti cd.getMembers().register(createObserver(changes)); 201ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti 2021ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen cd.getMembers().removeAll(Arrays.asList(cd.getFieldByName("b").get(), "foo", cd.getFieldByName("d").get())); 203ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti assertEquals(Arrays.asList("'int b;' REMOVAL in list at 1", 204ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti "'int d;' REMOVAL in list at 2"), changes); 205ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1Federico Tomassetti } 206cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti 207cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti @Test 208cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti public void retainAll() { 209cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti List<String> changes = new LinkedList<>(); 210cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti String code = "class A { int a; int b; int c; int d; int e; }"; 211cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 2121ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 213cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti cd.getMembers().register(createObserver(changes)); 214cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti 2151ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen cd.getMembers().retainAll(Arrays.asList(cd.getFieldByName("b").get(), "foo", cd.getFieldByName("d").get())); 216cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0", 217cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti "'int c;' REMOVAL in list at 1", 218cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti "'int e;' REMOVAL in list at 2"), changes); 219cbaf4495c17eb3383e8d2b40db9a4fe92221d118Federico Tomassetti } 22034ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti 22134ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti @Test 22234ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti public void replaceAll() { 22334ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti List<String> changes = new LinkedList<>(); 22434ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti String code = "class A { int a; int b; int c; }"; 22534ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 2261ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 22734ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti cd.getMembers().register(createObserver(changes)); 22834ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti 22934ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti cd.getMembers().replaceAll(bodyDeclaration -> { 2304296abb695b767f7471dd255d0679516183b062aDanny van Bruggen FieldDeclaration clone = (FieldDeclaration) bodyDeclaration.clone(); 23124a58469927e0faee2d29a628467e998ed491449Danny van Bruggen SimpleName id = clone.getVariable(0).getName(); 23224a58469927e0faee2d29a628467e998ed491449Danny van Bruggen id.setIdentifier(id.getIdentifier().toUpperCase()); 23334ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti return clone; 23434ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti }); 23534ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0", "'int A;' ADDITION in list at 0", 23634ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti "'int b;' REMOVAL in list at 1", "'int B;' ADDITION in list at 1", 23734ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti "'int c;' REMOVAL in list at 2", "'int C;' ADDITION in list at 2"), changes); 23834ee4b944cf1534361d6d9ca7ba3f9876df5ddb4Federico Tomassetti } 23955d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti 24055d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti @Test 24155d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti public void removeIf() { 24255d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti List<String> changes = new LinkedList<>(); 24355d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti String code = "class A { int a; int longName; int c; }"; 24455d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 2451ff8db9b9d9fdd6c9655d9d37761a00e98ab6d04Danny van Bruggen ClassOrInterfaceDeclaration cd = cu.getClassByName("A").get(); 24655d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti cd.getMembers().register(createObserver(changes)); 24755d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti 24824a58469927e0faee2d29a628467e998ed491449Danny van Bruggen cd.getMembers().removeIf(m -> ((FieldDeclaration) m).getVariable(0).getName().getIdentifier().length() > 3); 24955d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti assertEquals(Arrays.asList("'int longName;' REMOVAL in list at 1"), changes); 25055d475bac6deff387e608ac7f200227a23488ea7Federico Tomassetti } 251f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen 252f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen @Test 253f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen public void replace() { 254f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen final NodeList<Name> list = nodeList(new Name("a"), new Name("b"), new Name("c")); 255f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen 256f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen final boolean replaced = list.replace(new Name("b"), new Name("z")); 257f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen 258f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen assertEquals(true, replaced); 259f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen assertEquals(3, list.size()); 260f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen assertEquals("a", list.get(0).asString()); 261f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen assertEquals("z", list.get(1).asString()); 262f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen assertEquals("c", list.get(2).asString()); 263f64e8f570cb375692d112e03d095040e88d109abDanny van Bruggen } 2643b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen 2653b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen @Test 2663b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen public void toStringTest() { 2673b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), new Name("cde")); 2683b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen 269716c3b490fe90c09b9ca66d66569eb58f52e8b48Danny van Bruggen assertEquals("[abc, bcd, cde]", list.toString()); 2703b31ef89fd3f2963c2bf53655f42ed459376e879Danny van Bruggen } 271ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 27233115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 273dd34bf7240d5269586b601e76a8735629d90d5aaDanny van Bruggen public void addFirst() { 27433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), new Name("cde")); 27533115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 276dd34bf7240d5269586b601e76a8735629d90d5aaDanny van Bruggen list.addFirst(new Name("xxx")); 277ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 27833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[xxx, abc, bcd, cde]", list.toString()); 27933115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 280ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 28133115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 282dd34bf7240d5269586b601e76a8735629d90d5aaDanny van Bruggen public void addLast() { 28333115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), new Name("cde")); 28433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 285dd34bf7240d5269586b601e76a8735629d90d5aaDanny van Bruggen list.addLast(new Name("xxx")); 286ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 28733115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[abc, bcd, cde, xxx]", list.toString()); 28833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 28933115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 29033115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 29133115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen public void addBefore() { 29233115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen Name n = new Name("bcd"); 29333115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), n, new Name("cde")); 29433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 29533115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen list.addBefore(new Name("xxx"), n); 296ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 29733115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[abc, xxx, bcd, cde]", list.toString()); 29833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 29933115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 30033115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 30133115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen public void addAfter() { 30233115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen Name n = new Name("bcd"); 30333115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), n, new Name("cde")); 30433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 30533115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen list.addAfter(new Name("xxx"), n); 306ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 30733115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[abc, bcd, xxx, cde]", list.toString()); 30833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 30933115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 31033115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 31133115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen public void addBeforeFirst() { 31233115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen Name abc = new Name("abc"); 31333115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(abc, new Name("bcd"), new Name("cde")); 31433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 31533115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen list.addBefore(new Name("xxx"), abc); 316ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 31733115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[xxx, abc, bcd, cde]", list.toString()); 31833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 31933115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 32033115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen @Test 32133115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen public void addAfterLast() { 32233115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen Name cde = new Name("cde"); 32333115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen final NodeList<Name> list = nodeList(new Name("abc"), new Name("bcd"), cde); 32433115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen 32533115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen list.addAfter(new Name("xxx"), cde); 326ae442842668f9414f3a5fd8a294968d7cddf147fstephenramthun 32733115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen assertEquals("[abc, bcd, cde, xxx]", list.toString()); 32833115b3c857a87e398e9eaffd3d29c47804a0a53Danny van Bruggen } 3293e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti} 330