aboutsummaryrefslogtreecommitdiff
path: root/src/utils/lombok/javac/java8
diff options
context:
space:
mode:
authorRoel Spilker <r.spilker@gmail.com>2021-03-19 00:49:27 +0100
committerRoel Spilker <r.spilker@gmail.com>2021-03-19 01:11:48 +0100
commita5b7439516cdea9bce49f3403b637fb0b08f84a9 (patch)
tree839991745fe230c3213863dc03a91c6b4c7d5d2e /src/utils/lombok/javac/java8
parent76144935e2e74c98534a47a66d472de61fe1fef2 (diff)
downloadlombok-a5b7439516cdea9bce49f3403b637fb0b08f84a9.tar.gz
lombok-a5b7439516cdea9bce49f3403b637fb0b08f84a9.tar.bz2
lombok-a5b7439516cdea9bce49f3403b637fb0b08f84a9.zip
[jdk16] delombok
Diffstat (limited to 'src/utils/lombok/javac/java8')
-rw-r--r--src/utils/lombok/javac/java8/CommentCollectingScannerFactory.java6
-rw-r--r--src/utils/lombok/javac/java8/CommentCollectingTokenizer.java46
2 files changed, 38 insertions, 14 deletions
diff --git a/src/utils/lombok/javac/java8/CommentCollectingScannerFactory.java b/src/utils/lombok/javac/java8/CommentCollectingScannerFactory.java
index d0cac9ad..c9ae092e 100644
--- a/src/utils/lombok/javac/java8/CommentCollectingScannerFactory.java
+++ b/src/utils/lombok/javac/java8/CommentCollectingScannerFactory.java
@@ -72,11 +72,13 @@ public class CommentCollectingScannerFactory extends ScannerFactory {
super(context);
}
+ @SuppressWarnings("all")
@Override
public Scanner newScanner(CharSequence input, boolean keepDocComments) {
char[] array;
if (input instanceof CharBuffer && ((CharBuffer) input).hasArray()) {
- array = ((CharBuffer) input).compact().flip().array();
+ // yes, the char[] cast is necessary
+ array = (char[]) ((CharBuffer) input).compact().flip().array();
} else {
array = input.toString().toCharArray();
}
@@ -85,6 +87,6 @@ public class CommentCollectingScannerFactory extends ScannerFactory {
@Override
public Scanner newScanner(char[] input, int inputLength, boolean keepDocComments) {
- return new CommentCollectingScanner(this, new CommentCollectingTokenizer(this, input, inputLength, findTextBlocks));
+ return new CommentCollectingScanner(this, CommentCollectingTokenizer.create(this, input, inputLength, findTextBlocks));
}
}
diff --git a/src/utils/lombok/javac/java8/CommentCollectingTokenizer.java b/src/utils/lombok/javac/java8/CommentCollectingTokenizer.java
index 7f296d83..4a31fc81 100644
--- a/src/utils/lombok/javac/java8/CommentCollectingTokenizer.java
+++ b/src/utils/lombok/javac/java8/CommentCollectingTokenizer.java
@@ -23,36 +23,51 @@ package lombok.javac.java8;
import java.nio.CharBuffer;
-import lombok.javac.CommentInfo;
-import lombok.javac.CommentInfo.EndConnection;
-import lombok.javac.CommentInfo.StartConnection;
-
import com.sun.tools.javac.parser.JavaTokenizer;
import com.sun.tools.javac.parser.ScannerFactory;
import com.sun.tools.javac.parser.Tokens.Comment;
-import com.sun.tools.javac.parser.Tokens.Token;
import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
+import com.sun.tools.javac.parser.Tokens.Token;
import com.sun.tools.javac.parser.UnicodeReader;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.ListBuffer;
+import lombok.javac.CommentInfo;
+import lombok.javac.CommentInfo.EndConnection;
+import lombok.javac.CommentInfo.StartConnection;
+
class CommentCollectingTokenizer extends JavaTokenizer {
+
+ private static final boolean tokenizerIsUnicodeReader = JavaTokenizer.class.getSuperclass().getSimpleName().equals("UnicodeReader");
+
private int prevEndPosition = 0;
private final ListBuffer<CommentInfo> comments = new ListBuffer<CommentInfo>();
private final ListBuffer<Integer> textBlockStarts;
private int endComment = 0;
- CommentCollectingTokenizer(ScannerFactory fac, char[] buf, int inputLength, boolean findTextBlocks) {
+ static CommentCollectingTokenizer create(ScannerFactory fac, char[] buf, int inputLength, boolean findTextBlocks) {
+ if (tokenizerIsUnicodeReader) {
+ return new CommentCollectingTokenizer(fac, buf, inputLength, findTextBlocks, true);
+ }
+ return new CommentCollectingTokenizer(fac, buf, inputLength, findTextBlocks);
+ }
+
+ // pre java 16
+ private CommentCollectingTokenizer(ScannerFactory fac, char[] buf, int inputLength, boolean findTextBlocks) {
super(fac, new PositionUnicodeReader(fac, buf, inputLength));
textBlockStarts = findTextBlocks ? new ListBuffer<Integer>() : null;
}
- CommentCollectingTokenizer(ScannerFactory fac, CharBuffer buf, boolean findTextBlocks) {
- super(fac, new PositionUnicodeReader(fac, buf));
+ // from java 16
+ private CommentCollectingTokenizer(ScannerFactory fac, char[] buf, int inputLength, boolean findTextBlocks, boolean java16Signature) {
+ super(fac, buf, inputLength);
textBlockStarts = findTextBlocks ? new ListBuffer<Integer>() : null;
}
int pos() {
+ if (tokenizerIsUnicodeReader) {
+ return position();
+ }
return ((PositionUnicodeReader) reader).pos();
}
@@ -60,7 +75,7 @@ class CommentCollectingTokenizer extends JavaTokenizer {
Token token = super.readToken();
prevEndPosition = pos();
if (textBlockStarts != null && (prevEndPosition - token.pos > 5) && token.getClass().getName().endsWith("$StringToken")) {
- char[] start = reader.getRawCharacters(token.pos, token.pos + 3);
+ char[] start = reader().getRawCharacters(token.pos, token.pos + 3);
if (start[0] == '"' && start[1] == '"' && start[2] == '"') textBlockStarts.append(token.pos);
}
return token;
@@ -70,7 +85,7 @@ class CommentCollectingTokenizer extends JavaTokenizer {
protected Comment processComment(int pos, int endPos, CommentStyle style) {
int prevEndPos = Math.max(prevEndPosition, endComment);
endComment = endPos;
- String content = new String(reader.getRawCharacters(pos, endPos));
+ String content = new String(reader().getRawCharacters(pos, endPos));
StartConnection start = determineStartConnection(prevEndPos, pos);
EndConnection end = determineEndConnection(endPos);
@@ -85,7 +100,7 @@ class CommentCollectingTokenizer extends JavaTokenizer {
for (int i = pos;; i++) {
char c;
try {
- c = reader.getRawCharacters(i, i + 1)[0];
+ c = reader().getRawCharacters(i, i + 1)[0];
} catch (IndexOutOfBoundsException e) {
c = '\n';
}
@@ -104,7 +119,7 @@ class CommentCollectingTokenizer extends JavaTokenizer {
if (from == to) {
return StartConnection.DIRECT_AFTER_PREVIOUS;
}
- char[] between = reader.getRawCharacters(from, to);
+ char[] between = reader().getRawCharacters(from, to);
if (isNewLine(between[between.length - 1])) {
return StartConnection.START_OF_LINE;
}
@@ -128,6 +143,13 @@ class CommentCollectingTokenizer extends JavaTokenizer {
return textBlockStarts == null ? List.<Integer>nil() : textBlockStarts.toList();
}
+ private UnicodeReader reader() {
+ if (tokenizerIsUnicodeReader) {
+ return (UnicodeReader) (Object) this;
+ }
+ return reader;
+ }
+
static class PositionUnicodeReader extends UnicodeReader {
protected PositionUnicodeReader(ScannerFactory sf, char[] input, int inputLength) {
super(sf, input, inputLength);