Search in sources :

Example 1 with AstObserver

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;
}
Also used : AstObserver(com.github.javaparser.ast.observer.AstObserver) PropagatingAstObserver(com.github.javaparser.ast.observer.PropagatingAstObserver)

Example 2 with AstObserver

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);
}
Also used : AstObserverAdapter(com.github.javaparser.ast.observer.AstObserverAdapter) AstObserver(com.github.javaparser.ast.observer.AstObserver) Test(org.junit.Test)

Example 3 with AstObserver

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);
}
Also used : ObservableProperty(com.github.javaparser.ast.observer.ObservableProperty) AstObserverAdapter(com.github.javaparser.ast.observer.AstObserverAdapter) PrimitiveType(com.github.javaparser.ast.type.PrimitiveType) AstObserver(com.github.javaparser.ast.observer.AstObserver) Test(org.junit.Test)

Example 4 with AstObserver

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);
}
Also used : ObservableProperty(com.github.javaparser.ast.observer.ObservableProperty) AstObserverAdapter(com.github.javaparser.ast.observer.AstObserverAdapter) PrimitiveType(com.github.javaparser.ast.type.PrimitiveType) AstObserver(com.github.javaparser.ast.observer.AstObserver) Test(org.junit.Test)

Example 5 with AstObserver

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);
}
Also used : ObservableProperty(com.github.javaparser.ast.observer.ObservableProperty) AstObserverAdapter(com.github.javaparser.ast.observer.AstObserverAdapter) AstObserver(com.github.javaparser.ast.observer.AstObserver) Test(org.junit.Test)

Aggregations

AstObserver (com.github.javaparser.ast.observer.AstObserver)8 AstObserverAdapter (com.github.javaparser.ast.observer.AstObserverAdapter)7 Test (org.junit.Test)7 ObservableProperty (com.github.javaparser.ast.observer.ObservableProperty)5 PrimitiveType (com.github.javaparser.ast.type.PrimitiveType)4 PropagatingAstObserver (com.github.javaparser.ast.observer.PropagatingAstObserver)1