mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-16 00:15:01 +00:00
[jdk16] delombok
This commit is contained in:
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);
|
||||
|
||||
Reference in new issue
Block a user