1 /*
2  * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3  * Copyright (C) 2011, 2013-2016 The JavaParser Team.
4  *
5  * This file is part of JavaParser.
6  *
7  * JavaParser can be used either under the terms of
8  * a) the GNU Lesser General Public License as published by
9  *     the Free Software Foundation, either version 3 of the License, or
10  *     (at your option) any later version.
11  * b) the terms of the Apache License
12  *
13  * You should have received a copy of both licenses in LICENCE.LGPL and
14  * LICENCE.APACHE. Please refer to those files for details.
15  *
16  * JavaParser is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU Lesser General Public License for more details.
20  */
21 
22 package com.github.javaparser.ast.observer;
23 
24 import com.github.javaparser.ast.Node;
25 import com.github.javaparser.ast.NodeList;
26 
27 /**
28  * An Observer for an AST element (either a Node or a NodeList).
29  */
30 public interface AstObserver {
31 
32     /**
33      * Type of change occurring on a List
34      */
35     enum ListChangeType {
36         ADDITION,
37         REMOVAL
38     }
39 
40     /**
41      * The value of a property is changed
42      *
43      * @param observedNode owner of the property
44      * @param property property changed
45      * @param oldValue value of the property before the change
46      * @param newValue value of the property after the change
47      */
propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue)48     void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue);
49 
50     /**
51      * The parent of a node is changed
52      *
53      * @param observedNode node of which the parent is changed
54      * @param previousParent previous parent
55      * @param newParent new parent
56      */
parentChange(Node observedNode, Node previousParent, Node newParent)57     void parentChange(Node observedNode, Node previousParent, Node newParent);
58 
59     /**
60      * A list is changed
61      *
62      * @param observedNode list changed
63      * @param type type of change
64      * @param index position at which the changed occurred
65      * @param nodeAddedOrRemoved element added or removed
66      */
listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved)67     void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved);
68 
listReplacement(NodeList observedNode, int index, Node oldNode, Node newNode)69     void listReplacement(NodeList observedNode, int index, Node oldNode, Node newNode);
70 }
71