/** * Format the faulty source code line and point to the error. * * @param d The diagnostic for which the error line should be printed */ protected String formatSourceLine(JCDiagnostic d, int nSpaces) { StringBuilder buf = new StringBuilder(); DiagnosticSource source = d.getDiagnosticSource(); int pos = d.getIntPosition(); if (d.getIntPosition() == Position.NOPOS) throw new AssertionError(); String line = (source == null ? null : source.getLine(pos)); if (line == null) return ""; buf.append(indent(line, nSpaces)); int col = source.getColumnNumber(pos, false); if (config.isCaretEnabled()) { buf.append("\n"); for (int i = 0; i < col - 1; i++) { buf.append((line.charAt(i) == '\t') ? "\t" : " "); } buf.append(indent("^", nSpaces)); } return buf.toString(); }
protected int getIntEndPosition() { return (position == null ? Position.NOPOS : position.getEndPosition(source.getEndPosTable())); }
/** * Get the name of the source file referred to by this diagnostic. * * @return the name of the source referred to with this diagnostic, or null if none */ @DefinedBy(Api.COMPILER) public JavaFileObject getSource() { if (source == null) return null; else return source.getFile(); }