[jdk16] delombok

This commit is contained in:
Roel Spilker committed 2021-03-19 01:11:48 +01:00
1 parent 76144935e2
commit a5b7439516
3 files changed
+55 -14

No files matched your search

@@ -1,11 +1,15 @@
package com.sun.tools.javac.parser;
import java.nio.CharBuffer;
import com.sun.tools.javac.parser.Tokens.Comment;
import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
public class JavaTokenizer {
// used before java 16
protected UnicodeReader reader;
// used before java 16
protected JavaTokenizer(ScannerFactory fac, UnicodeReader reader) {
}
@@ -16,4 +20,17 @@ public class JavaTokenizer {
protected Comment processComment(int pos, int endPos, CommentStyle style) {
return null;
}
// used in java 16
protected JavaTokenizer(ScannerFactory fac, char[] buf, int inputLength) {
}
// used in java 16
protected JavaTokenizer(ScannerFactory fac, CharBuffer buf) {
}
// introduced in java 16
protected int position() {
return -1;
}
}
@@ -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));
}
}
@@ -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);