aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java')
-rw-r--r--javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java b/javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java
new file mode 100644
index 000000000..da4331edf
--- /dev/null
+++ b/javaparser-core/src/main/javacc-support/com/github/javaparser/GeneratedJavaParserTokenManagerBase.java
@@ -0,0 +1,46 @@
+package com.github.javaparser;
+
+import com.github.javaparser.ast.comments.BlockComment;
+import com.github.javaparser.ast.comments.Comment;
+import com.github.javaparser.ast.comments.JavadocComment;
+import com.github.javaparser.ast.comments.LineComment;
+
+import static com.github.javaparser.GeneratedJavaParserConstants.*;
+import static com.github.javaparser.Position.pos;
+
+/**
+ * Base class for {@link com.github.javaparser.GeneratedJavaParserTokenManager}
+ */
+abstract class GeneratedJavaParserTokenManagerBase {
+ /**
+ * Create a TokenRange that spans exactly one token
+ */
+ private static TokenRange tokenRange(Token token) {
+ JavaToken javaToken = token.javaToken;
+ return new TokenRange(javaToken, javaToken);
+ }
+
+ /**
+ * Since comments are completely captured in a single token, including their delimiters, deconstruct them here so we
+ * can turn them into nodes later on.
+ */
+ static Comment createCommentFromToken(Token token) {
+ String commentText = token.image;
+ if (token.kind == JAVADOC_COMMENT) {
+ return new JavadocComment(tokenRange(token), commentText.substring(3, commentText.length() - 2));
+ } else if (token.kind == MULTI_LINE_COMMENT) {
+ return new BlockComment(tokenRange(token), commentText.substring(2, commentText.length() - 2));
+ } else if (token.kind == SINGLE_LINE_COMMENT) {
+ // line comments have their end of line character(s) included, and we don't want that.
+ Range range = new Range(pos(token.beginLine, token.beginColumn), pos(token.endLine, token.endColumn));
+ while (commentText.endsWith("\r") || commentText.endsWith("\n")) {
+ commentText = commentText.substring(0, commentText.length() - 1);
+ }
+ range = range.withEnd(pos(range.begin.line, range.begin.column + commentText.length()));
+ LineComment comment = new LineComment(tokenRange(token), commentText.substring(2));
+ comment.setRange(range);
+ return comment;
+ }
+ throw new AssertionError("Unexpectedly got passed a non-comment token.");
+ }
+}