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