private String format_std(JCDiagnostic d) {
DEBUG.P(this,"format_std(1)");
//DEBUG.P("d="+d);//这会引起无限调用,引起JCDiagnostic.toString()==>format==>format_std
DiagnosticSource source = d.getDiagnosticSource();
DiagnosticType type = d.getType();
int position = d.getIntPosition();
String format = noPosFormat;
if (source != null) {
if (position != Position.NOPOS) {
format = posFormat;
} else if (source.getFile() != null &&
source.getFile().getKind() == JavaFileObject.Kind.CLASS) {
format = classFormat;
}
}
StringBuilder sb = new StringBuilder();
DEBUG.P("format="+format);
for (int i = 0; i < format.length(); i++) {
char c = format.charAt(i);
if (c == '%' && i < format.length() - 1) {
c = format.charAt(++i);
switch (c) {
case 'b':
sb.append(source == null ? "-" : source.getName());
break;
case 'e':
sb.append(position == Position.NOPOS ? "-" : String.valueOf(d.getEndPosition()));
break;