aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java')
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java b/javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java
new file mode 100644
index 000000000..f3f25777e
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/comments/CommentsCollection.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2016 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+
+package com.github.javaparser.ast.comments;
+
+import com.github.javaparser.Range;
+
+import java.util.Collection;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+import static com.github.javaparser.ast.Node.NODE_BY_BEGIN_POSITION;
+
+/**
+ * The comments contained in a certain parsed piece of source code.
+ */
+public class CommentsCollection {
+ private final TreeSet<Comment> comments = new TreeSet<>(NODE_BY_BEGIN_POSITION);
+
+ public CommentsCollection() {
+ }
+
+ public CommentsCollection(Collection<Comment> commentsToCopy) {
+ comments.addAll(commentsToCopy);
+ }
+
+ public Set<LineComment> getLineComments() {
+ return comments.stream()
+ .filter(comment -> comment instanceof LineComment)
+ .map(comment -> (LineComment) comment)
+ .collect(Collectors.toCollection(() -> new TreeSet<>(NODE_BY_BEGIN_POSITION)));
+ }
+
+ public Set<BlockComment> getBlockComments() {
+ return comments.stream()
+ .filter(comment -> comment instanceof BlockComment)
+ .map(comment -> (BlockComment) comment)
+ .collect(Collectors.toCollection(() -> new TreeSet<>(NODE_BY_BEGIN_POSITION)));
+ }
+
+ public Set<JavadocComment> getJavadocComments() {
+ return comments.stream()
+ .filter(comment -> comment instanceof JavadocComment)
+ .map(comment -> (JavadocComment) comment)
+ .collect(Collectors.toCollection(() -> new TreeSet<>(NODE_BY_BEGIN_POSITION)));
+ }
+
+ public void addComment(Comment comment) {
+ comments.add(comment);
+ }
+
+ public boolean contains(Comment comment) {
+ if (!comment.getRange().isPresent()) {
+ return false;
+ }
+ Range commentRange = comment.getRange().get();
+ for (Comment c : getComments()) {
+ if (!c.getRange().isPresent()) {
+ return false;
+ }
+ Range cRange = c.getRange().get();
+ // we tolerate a difference of one element in the end column:
+ // it depends how \r and \n are calculated...
+ if (cRange.begin.equals(commentRange.begin) &&
+ cRange.end.line == commentRange.end.line &&
+ Math.abs(cRange.end.column - commentRange.end.column) < 2) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public TreeSet<Comment> getComments() {
+ return comments;
+ }
+
+ public int size() {
+ return comments.size();
+ }
+
+ public CommentsCollection minus(CommentsCollection other) {
+ CommentsCollection result = new CommentsCollection();
+ result.comments.addAll(
+ comments.stream()
+ .filter(comment -> !other.contains(comment))
+ .collect(Collectors.toList()));
+ return result;
+ }
+
+ public CommentsCollection copy() {
+ return new CommentsCollection(comments);
+ }
+}