use of com.github.javaparser.ast.observer.AstObserver in project javaparser by javaparser.
the class LexicalPreservingPrinter method setup.
/**
* Prepares the node so it can be used in the print methods.
* The correct order is:
* <ol>
* <li>Parse some code</li>
* <li>Call this setup method on the result</li>
* <li>Make changes to the AST as desired</li>
* <li>Use one of the print methods on this class to print out the original source code with your changes added</li>
* </ol>
*
* @return the node passed as a parameter for your convenience.
*/
public static <N extends Node> N setup(N node) {
assertNotNull(node);
node.getTokenRange().ifPresent(r -> {
storeInitialText(node);
// Setup observer
AstObserver observer = createObserver();
node.registerForSubtree(observer);
});
return node;
}
use of com.github.javaparser.ast.observer.AstObserver in project javaparser by javaparser.
the class NodeTest method deleteAParameterTriggerNotifications.
@Test
public void deleteAParameterTriggerNotifications() {
String code = "class A { void foo(int p) { }}";
CompilationUnit cu = parse(code);
List<String> changes = new ArrayList<>();
AstObserver observer = new AstObserverAdapter() {
@Override
public void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved) {
changes.add("removing [" + nodeAddedOrRemoved + "] from index " + index);
}
};
cu.register(observer, Node.ObserverRegistrationMode.SELF_PROPAGATING);
cu.getClassByName("A").get().getMethodsByName("foo").get(0).getParameter(0).remove();
assertEquals(Arrays.asList("removing [int p] from index 0"), changes);
}
use of com.github.javaparser.ast.observer.AstObserver in project javaparser by javaparser.
the class NodeTest method registerWithJustNodeMode.
@Test
public void registerWithJustNodeMode() {
String code = "class A { int f; void foo(int p) { return 'z'; }}";
CompilationUnit cu = parse(code);
List<String> changes = new ArrayList<>();
AstObserver observer = new AstObserverAdapter() {
@Override
public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) {
changes.add(String.format("%s.%s changed from %s to %s", observedNode.getClass().getSimpleName(), property.name().toLowerCase(), oldValue, newValue));
}
};
cu.getClassByName("A").get().register(observer, Node.ObserverRegistrationMode.JUST_THIS_NODE);
assertEquals(Arrays.asList(), changes);
cu.getClassByName("A").get().setName("MyCoolClass");
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass"), changes);
cu.getClassByName("MyCoolClass").get().getFieldByName("f").get().getVariable(0).setType(new PrimitiveType(PrimitiveType.Primitive.BOOLEAN));
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass"), changes);
cu.getClassByName("MyCoolClass").get().getMethodsByName("foo").get(0).getParameterByName("p").get().setName("myParam");
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass"), changes);
cu.getClassByName("MyCoolClass").get().addField("int", "bar").getVariables().get(0).setInitializer("0");
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass"), changes);
}
use of com.github.javaparser.ast.observer.AstObserver in project javaparser by javaparser.
the class NodeTest method registerSubTree.
@Test
public void registerSubTree() {
String code = "class A { int f; void foo(int p) { return 'z'; }}";
CompilationUnit cu = parse(code);
List<String> changes = new ArrayList<>();
AstObserver observer = new AstObserverAdapter() {
@Override
public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) {
changes.add(String.format("%s.%s changed from %s to %s", observedNode.getClass().getSimpleName(), property.name().toLowerCase(), oldValue, newValue));
}
};
cu.registerForSubtree(observer);
assertEquals(Arrays.asList(), changes);
cu.getClassByName("A").get().setName("MyCoolClass");
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass"), changes);
cu.getClassByName("MyCoolClass").get().getFieldByName("f").get().getVariable(0).setType(new PrimitiveType(PrimitiveType.Primitive.BOOLEAN));
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass", "FieldDeclaration.maximum_common_type changed from int to boolean", "VariableDeclarator.type changed from int to boolean"), changes);
cu.getClassByName("MyCoolClass").get().getMethodsByName("foo").get(0).getParameterByName("p").get().setName("myParam");
assertEquals(Arrays.asList("ClassOrInterfaceDeclaration.name changed from A to MyCoolClass", "FieldDeclaration.maximum_common_type changed from int to boolean", "VariableDeclarator.type changed from int to boolean", "Parameter.name changed from p to myParam"), changes);
}
use of com.github.javaparser.ast.observer.AstObserver in project javaparser by javaparser.
the class NodeTest method deleteMethodBodyDoesTriggerNotifications.
@Test
public void deleteMethodBodyDoesTriggerNotifications() {
String code = "class A { void foo(int p) { }}";
CompilationUnit cu = parse(code);
List<String> changes = new ArrayList<>();
AstObserver observer = new AstObserverAdapter() {
@Override
public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) {
changes.add("setting [" + property + "] to " + newValue);
}
@Override
public void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved) {
changes.add("removing [" + nodeAddedOrRemoved + "] from index " + index);
}
};
cu.register(observer, Node.ObserverRegistrationMode.SELF_PROPAGATING);
assertEquals(true, cu.getClassByName("A").get().getMethodsByName("foo").get(0).getBody().get().remove());
assertEquals(Arrays.asList("setting [BODY] to null"), changes);
}
Aggregations