• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.nodeTypes;
23 
24 import com.github.javaparser.ast.Node;
25 import com.github.javaparser.ast.comments.Comment;
26 import com.github.javaparser.ast.comments.JavadocComment;
27 import com.github.javaparser.javadoc.Javadoc;
28 
29 import java.util.Optional;
30 
31 /**
32  * A node that can be documented with a Javadoc comment.
33  */
34 public interface NodeWithJavadoc<N extends Node> {
getComment()35     Optional<Comment> getComment();
36 
setComment(Comment comment)37     Node setComment(Comment comment);
38 
39     /**
40      * Gets the JavadocComment for this node. You can set the JavadocComment by calling setJavadocComment passing a
41      * JavadocComment.
42      *
43      * @return The JavadocComment for this node wrapped in an optional as it may be absent.
44      */
getJavadocComment()45     default Optional<JavadocComment> getJavadocComment() {
46         return getComment()
47                 .filter(comment -> comment instanceof JavadocComment)
48                 .map(comment -> (JavadocComment) comment);
49     }
50 
51     /**
52      * Gets the Javadoc for this node. You can set the Javadoc by calling setJavadocComment passing a Javadoc.
53      *
54      * @return The Javadoc for this node wrapped in an optional as it may be absent.
55      */
getJavadoc()56     default Optional<Javadoc> getJavadoc() {
57         return getJavadocComment().map(JavadocComment::parse);
58     }
59 
60     /**
61      * Use this to store additional information to this node.
62      *
63      * @param comment to be set
64      */
65     @SuppressWarnings("unchecked")
setJavadocComment(String comment)66     default N setJavadocComment(String comment) {
67         return setJavadocComment(new JavadocComment(comment));
68     }
69 
setJavadocComment(JavadocComment comment)70     default N setJavadocComment(JavadocComment comment) {
71         setComment(comment);
72         return (N) this;
73     }
74 
setJavadocComment(String indentation, Javadoc javadoc)75     default N setJavadocComment(String indentation, Javadoc javadoc) {
76         return setJavadocComment(javadoc.toComment(indentation));
77     }
78 
setJavadocComment(Javadoc javadoc)79     default N setJavadocComment(Javadoc javadoc) {
80         return setJavadocComment(javadoc.toComment());
81     }
82 
removeJavaDocComment()83     default boolean removeJavaDocComment() {
84         return hasJavaDocComment() && getComment().get().remove();
85     }
86 
hasJavaDocComment()87     default boolean hasJavaDocComment() {
88         return getComment().isPresent() && getComment().get() instanceof JavadocComment;
89     }
90 
91 }
92