--- a/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java Mon Sep 17 10:53:56 2018 +0200
+++ b/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java Mon Sep 17 08:37:47 2018 -0700
@@ -67,7 +67,7 @@
private boolean maskModifiers;
// Does the string end with an unclosed '/*' style comment?
- private boolean openComment = false;
+ private boolean openToken = false;
MaskCommentsAndModifiers(String s, boolean maskModifiers) {
this.str = s;
@@ -88,8 +88,8 @@
return sbMask.toString();
}
- boolean endsWithOpenComment() {
- return openComment;
+ boolean endsWithOpenToken() {
+ return openToken;
}
/****** private implementation methods ******/
@@ -142,7 +142,7 @@
private void next() {
switch (c) {
case '\'':
- case '"':
+ case '"': {
maskModifiers = false;
write(c);
int match = c;
@@ -154,6 +154,38 @@
}
write(c); // write match // line-end
break;
+ }
+ case '`': { // RawString
+ maskModifiers = false;
+ int backtickCount = 0;
+ do {
+ write(c);
+ ++backtickCount;
+ read();
+ } while (c == '`');
+ while (true) {
+ if (c == '`') {
+ int cnt = 0;
+ do {
+ write(c);
+ ++cnt;
+ read();
+ } while (c == '`');
+ if (cnt == backtickCount) {
+ unread();
+ break;
+ }
+ } else {
+ write(c);
+ if (c < 0) {
+ openToken = true;
+ break;
+ }
+ read();
+ }
+ }
+ break;
+ }
case '/':
read();
switch (c) {
@@ -166,7 +198,7 @@
prevc = c;
}
writeMask(c);
- openComment = c < 0;
+ openToken = c < 0;
break;
case '/':
writeMask('/');