< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/Utils.java

Print this page

        

*** 250,255 **** --- 250,301 ---- public static Optional<Path> findLibraryPath(Path[] paths, String libName) { return Arrays.stream(paths). map(p -> p.resolve(System.mapLibraryName(libName))). filter(Files::isRegularFile).map(Path::toAbsolutePath).findFirst(); } + + /* + * FIXME: when we add jdk.compiler dependency from jdk.jextract module, revisit + * the following. The following methods 'quote', 'quote' and 'isPrintableAscii' + * are from javac source. See also com.sun.tools.javac.util.Convert.java. + */ + + /** + * Escapes each character in a string that has an escape sequence or + * is non-printable ASCII. Leaves non-ASCII characters alone. + */ + public static String quote(String s) { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + buf.append(quote(s.charAt(i))); + } + return buf.toString(); + } + + /** + * Escapes a character if it has an escape sequence or is + * non-printable ASCII. Leaves non-ASCII characters alone. + */ + public static String quote(char ch) { + switch (ch) { + case '\b': return "\\b"; + case '\f': return "\\f"; + case '\n': return "\\n"; + case '\r': return "\\r"; + case '\t': return "\\t"; + case '\'': return "\\'"; + case '\"': return "\\\""; + case '\\': return "\\\\"; + default: + return (isPrintableAscii(ch)) + ? String.valueOf(ch) + : String.format("\\u%04x", (int) ch); + } + } + + /** + * Is a character printable ASCII? + */ + private static boolean isPrintableAscii(char ch) { + return ch >= ' ' && ch <= '~'; + } }
< prev index next >