javaparser
javaparser copied to clipboard
\s escape gives lexical error but should be valid in Java 16/17
This code fails to parse in javaparser but is considered valid in Java 16 and 17: https://www.jdoodle.com/ia/qrZ.
The escape \s
in a string literal is replaced by a space when compiling code using javac, but gives Lexical error at line 3, column 33. Encountered: "s" (115), after : "\"Hello\\"
when parsed with javaparser.
I could not find any documentation about it but it appears that \s
became a valid escape sequence somewhere after Java 11 and before or with Java 16.
that actually looks right https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-EscapeSequence
I think that change happened with the last update to text blocks, so that you can have trailing spaces in a text block. Maybe it was forgotten, or it was only implemented for text blocks.
I find same issue when I run parser with JDK15.
error logs:
Lexical error at line 268, column 50. Encountered: "s" (115), after : "\"^\\\\s+vf\\\\s+(?<vf>\\\\d+)\\"
Problem stacktrace :
com.github.javaparser.GeneratedJavaParserTokenManager.getNextToken(GeneratedJavaParserTokenManager.java:3054)
com.github.javaparser.GeneratedJavaParser.jj_scan_token(GeneratedJavaParser.java:13563)
com.github.javaparser.GeneratedJavaParser.jj_3R_203(GeneratedJavaParser.java:9138)
com.github.javaparser.GeneratedJavaParser.jj_3R_139(GeneratedJavaParser.java:9029)
com.github.javaparser.GeneratedJavaParser.jj_3R_89(GeneratedJavaParser.java:13394)
com.github.javaparser.GeneratedJavaParser.jj_3R_188(GeneratedJavaParser.java:13153)
com.github.javaparser.GeneratedJavaParser.jj_3R_125(GeneratedJavaParser.java:13135)
com.github.javaparser.GeneratedJavaParser.jj_3R_122(GeneratedJavaParser.java:9977)
com.github.javaparser.GeneratedJavaParser.jj_3_54(GeneratedJavaParser.java:9957)
com.github.javaparser.GeneratedJavaParser.jj_2_54(GeneratedJavaParser.java:8872)
com.github.javaparser.GeneratedJavaParser.BlockStatement(GeneratedJavaParser.java:5695)
com.github.javaparser.GeneratedJavaParser.Statements(GeneratedJavaParser.java:2667)
com.github.javaparser.GeneratedJavaParser.Block(GeneratedJavaParser.java:5636)
com.github.javaparser.GeneratedJavaParser.MethodDeclaration(GeneratedJavaParser.java:2068)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBodyDeclaration(GeneratedJavaParser.java:1669)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceBody(GeneratedJavaParser.java:1183)
com.github.javaparser.GeneratedJavaParser.ClassOrInterfaceDeclaration(GeneratedJavaParser.java:500)
com.github.javaparser.GeneratedJavaParser.CompilationUnit(GeneratedJavaParser.java:152)
com.github.javaparser.JavaParser.parse(JavaParser.java:123)
com.github.javaparser.JavaParser.parse(JavaParser.java:306)
net.revelc.code.impsort.ImpSort.parseFile(ImpSort.java:132)