aboutsummaryrefslogtreecommitdiff
path: root/javaparser-core/src/main
diff options
context:
space:
mode:
authorDanny van Bruggen <hexagonaal@gmail.com>2017-09-28 22:36:36 +0200
committerDanny van Bruggen <hexagonaal@gmail.com>2017-09-28 22:48:49 +0200
commit163346317928f20e5bddffb586782ae450875e4d (patch)
tree90d8e6e9f95fdcd52a4a05cd9bb0324337ab07f9 /javaparser-core/src/main
parentb6d023198354d6f758d175a0f99dc55e676fe6bf (diff)
downloadjavaparser-163346317928f20e5bddffb586782ae450875e4d.tar.gz
Add methods to navigate to the root node of an AST
Diffstat (limited to 'javaparser-core/src/main')
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/Node.java28
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java3
2 files changed, 27 insertions, 4 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
index 0d7c822c8..5f45e75b0 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java
@@ -41,11 +41,12 @@ import com.github.javaparser.metamodel.NodeMetaModel;
import com.github.javaparser.metamodel.PropertyMetaModel;
import com.github.javaparser.printer.PrettyPrinter;
import com.github.javaparser.printer.PrettyPrinterConfiguration;
+
import javax.annotation.Generated;
import java.util.*;
+
import static com.github.javaparser.ast.Node.Parsedness.PARSED;
import static java.util.Collections.unmodifiableList;
-import com.github.javaparser.ast.Node;
/**
* Base class for all nodes of the abstract syntax tree.
@@ -297,8 +298,7 @@ public abstract class Node implements Cloneable, HasParentNode<Node>, Visitable,
/**
* Contains all nodes that have this node set as their parent.
- * You can add nodes to it by setting a node's parent to this node.
- * You can remove nodes from it by setting a child node's parent to something other than this node.
+ * You can add and remove nodes from this list by adding or removing nodes from the fields of this node.
*
* @return all nodes that have this node as their parent.
*/
@@ -641,4 +641,26 @@ public abstract class Node implements Cloneable, HasParentNode<Node>, Visitable,
}
return false;
}
+
+ /**
+ * Finds the root node of this AST by finding the topmost parent.
+ */
+ public Node findRootNode() {
+ Node n = this;
+ while (n.getParentNode().isPresent()) {
+ n = n.getParentNode().get();
+ }
+ return n;
+ }
+
+ /**
+ * @return the containing CompilationUnit, or empty if this node is not inside a compilation unit.
+ */
+ public Optional<CompilationUnit> findCompilationUnit() {
+ Node rootNode = findRootNode();
+ if (rootNode instanceof CompilationUnit) {
+ return Optional.of((CompilationUnit) rootNode);
+ }
+ return Optional.empty();
+ }
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java b/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java
index 79b906ad8..9de15f596 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/body/VariableDeclarator.java
@@ -30,6 +30,7 @@ import com.github.javaparser.ast.nodeTypes.NodeWithType;
import com.github.javaparser.ast.nodeTypes.NodeWithVariables;
import com.github.javaparser.ast.observer.AstObserverAdapter;
import com.github.javaparser.ast.observer.ObservableProperty;
+import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.ast.visitor.GenericVisitor;
@@ -61,7 +62,7 @@ public final class VariableDeclarator extends Node implements NodeWithType<Varia
private Type type;
public VariableDeclarator() {
- this(null, new SimpleName(), null);
+ this(null, new ClassOrInterfaceType(), new SimpleName(), null);
}
public VariableDeclarator(Type type, String variableName) {