312 super(ctx); |
317 super(ctx); |
313 } |
318 } |
314 |
319 |
315 @Override |
320 @Override |
316 protected java.io.PrintWriter getWriterForDiagnosticType(JCDiagnostic.DiagnosticType dt) { |
321 protected java.io.PrintWriter getWriterForDiagnosticType(JCDiagnostic.DiagnosticType dt) { |
317 return new java.io.PrintWriter(System.out); |
322 return outWriter; |
318 } |
323 } |
319 |
324 |
320 @Override |
325 @Override |
321 protected boolean shouldReport(JavaFileObject jfo, int pos) { |
326 protected boolean shouldReport(JavaFileObject jfo, int pos) { |
322 return true; |
327 return true; |
323 } |
328 } |
324 } |
329 } |
325 |
330 |
326 int nerrors = 0; |
331 OutputKind outputKind; |
327 |
332 ErrorKind errorKind; |
328 void exec(OutputKind outputKind, ErrorKind errorKind, MultilineKind multiKind, |
333 MultilineKind multiKind; |
|
334 MultilinePolicy multiPolicy; |
|
335 PositionKind posKind; |
|
336 XDiagsSource xdiagsSource; |
|
337 XDiagsCompact xdiagsCompact; |
|
338 CaretKind caretKind; |
|
339 SourceLineKind sourceLineKind; |
|
340 IndentKind summaryIndent; |
|
341 IndentKind detailsIndent; |
|
342 IndentKind sourceIndent; |
|
343 IndentKind subdiagsIndent; |
|
344 |
|
345 T6769027(OutputKind outputKind, ErrorKind errorKind, MultilineKind multiKind, |
329 MultilinePolicy multiPolicy, PositionKind posKind, XDiagsSource xdiagsSource, |
346 MultilinePolicy multiPolicy, PositionKind posKind, XDiagsSource xdiagsSource, |
330 XDiagsCompact xdiagsCompact, CaretKind caretKind, SourceLineKind sourceLineKind, |
347 XDiagsCompact xdiagsCompact, CaretKind caretKind, SourceLineKind sourceLineKind, |
331 IndentKind summaryIndent, IndentKind detailsIndent, IndentKind sourceIndent, |
348 IndentKind summaryIndent, IndentKind detailsIndent, IndentKind sourceIndent, |
332 IndentKind subdiagsIndent) { |
349 IndentKind subdiagsIndent) { |
|
350 this.outputKind = outputKind; |
|
351 this.errorKind = errorKind; |
|
352 this.multiKind = multiKind; |
|
353 this.multiPolicy = multiPolicy; |
|
354 this.posKind = posKind; |
|
355 this.xdiagsSource = xdiagsSource; |
|
356 this.xdiagsCompact = xdiagsCompact; |
|
357 this.caretKind = caretKind; |
|
358 this.sourceLineKind = sourceLineKind; |
|
359 this.summaryIndent = summaryIndent; |
|
360 this.detailsIndent = detailsIndent; |
|
361 this.sourceIndent = sourceIndent; |
|
362 this.subdiagsIndent = subdiagsIndent; |
|
363 } |
|
364 |
|
365 @Override |
|
366 public void run() { |
333 Context ctx = new Context(); |
367 Context ctx = new Context(); |
334 Options options = Options.instance(ctx); |
368 Options options = Options.instance(ctx); |
335 outputKind.init(options); |
369 outputKind.init(options); |
336 multiPolicy.init(options); |
370 multiPolicy.init(options); |
337 xdiagsSource.init(options); |
371 xdiagsSource.init(options); |
360 List.of(sub, sub) : |
394 List.of(sub, sub) : |
361 List.of(sub); |
395 List.of(sub); |
362 d = new JCDiagnostic.MultilineDiagnostic(d, subdiags); |
396 d = new JCDiagnostic.MultilineDiagnostic(d, subdiags); |
363 } |
397 } |
364 String diag = log.getDiagnosticFormatter().format(d, messages.getCurrentLocale()); |
398 String diag = log.getDiagnosticFormatter().format(d, messages.getCurrentLocale()); |
365 checkOutput(diag, |
399 checkOutput(diag); |
366 outputKind, |
400 } |
367 errorKind, |
401 |
368 multiKind, |
402 public static void main(String[] args) throws Exception { |
369 multiPolicy, |
|
370 posKind, |
|
371 xdiagsSource, |
|
372 xdiagsCompact, |
|
373 caretKind, |
|
374 sourceLineKind, |
|
375 summaryIndent, |
|
376 detailsIndent, |
|
377 sourceIndent, |
|
378 subdiagsIndent); |
|
379 } |
|
380 |
|
381 void test() { |
|
382 for (OutputKind outputKind : OutputKind.values()) { |
403 for (OutputKind outputKind : OutputKind.values()) { |
383 for (ErrorKind errKind : ErrorKind.values()) { |
404 for (ErrorKind errKind : ErrorKind.values()) { |
384 for (MultilineKind multiKind : MultilineKind.values()) { |
405 for (MultilineKind multiKind : MultilineKind.values()) { |
385 for (MultilinePolicy multiPolicy : MultilinePolicy.values()) { |
406 for (MultilinePolicy multiPolicy : MultilinePolicy.values()) { |
386 for (PositionKind posKind : PositionKind.values()) { |
407 for (PositionKind posKind : PositionKind.values()) { |
416 } |
437 } |
417 } |
438 } |
418 } |
439 } |
419 } |
440 } |
420 } |
441 } |
421 if (nerrors != 0) |
442 |
422 throw new AssertionError(nerrors + " errors found"); |
443 checkAfterExec(false); |
423 } |
444 } |
424 |
445 |
425 void printInfo(String msg, OutputKind outputKind, ErrorKind errorKind, MultilineKind multiKind, |
446 void printInfo(String msg, String errorLine) { |
426 MultilinePolicy multiPolicy, PositionKind posKind, XDiagsSource xdiagsSource, |
|
427 XDiagsCompact xdiagsCompact, CaretKind caretKind, SourceLineKind sourceLineKind, |
|
428 IndentKind summaryIndent, IndentKind detailsIndent, IndentKind sourceIndent, |
|
429 IndentKind subdiagsIndent, String errorLine) { |
|
430 String sep = "*********************************************************"; |
447 String sep = "*********************************************************"; |
431 String desc = "raw=" + outputKind + " pos=" + posKind + " key=" + errorKind.key() + |
448 String desc = "raw=" + outputKind + " pos=" + posKind + " key=" + errorKind.key() + |
432 " multiline=" + multiKind +" multiPolicy=" + multiPolicy.value + |
449 " multiline=" + multiKind +" multiPolicy=" + multiPolicy.value + |
433 " diags= " + java.util.Arrays.asList(xdiagsSource.flag, xdiagsCompact.flag) + |
450 " diags= " + java.util.Arrays.asList(xdiagsSource.flag, xdiagsCompact.flag) + |
434 " caret=" + caretKind + " sourcePosition=" + sourceLineKind + |
451 " caret=" + caretKind + " sourcePosition=" + sourceLineKind + |
435 " summaryIndent=" + summaryIndent + " detailsIndent=" + detailsIndent + |
452 " summaryIndent=" + summaryIndent + " detailsIndent=" + detailsIndent + |
436 " sourceIndent=" + sourceIndent + " subdiagsIndent=" + subdiagsIndent; |
453 " sourceIndent=" + sourceIndent + " subdiagsIndent=" + subdiagsIndent; |
437 System.out.println(sep); |
454 errWriter.println(sep); |
438 System.out.println(desc); |
455 errWriter.println(desc); |
439 System.out.println(sep); |
456 errWriter.println(sep); |
440 System.out.println(msg); |
457 errWriter.println(msg); |
441 System.out.println("Diagnostic formatting problem - expected diagnostic...\n" + errorLine); |
458 errWriter.println("Diagnostic formatting problem - expected diagnostic...\n" + errorLine); |
442 } |
459 } |
443 |
460 |
444 void checkOutput(String msg, OutputKind outputKind, ErrorKind errorKind, MultilineKind multiKind, |
461 void checkOutput(String msg) { |
445 MultilinePolicy multiPolicy, PositionKind posKind, XDiagsSource xdiagsSource, |
|
446 XDiagsCompact xdiagsCompact, CaretKind caretKind, SourceLineKind sourceLineKind, |
|
447 IndentKind summaryIndent, IndentKind detailsIndent, IndentKind sourceIndent, |
|
448 IndentKind subdiagsIndent) { |
|
449 boolean shouldPrintSource = posKind == PositionKind.POS && |
462 boolean shouldPrintSource = posKind == PositionKind.POS && |
450 xdiagsSource != XDiagsSource.NO_SOURCE && |
463 xdiagsSource != XDiagsSource.NO_SOURCE && |
451 (xdiagsSource == XDiagsSource.SOURCE || |
464 (xdiagsSource == XDiagsSource.SOURCE || |
452 outputKind == OutputKind.BASIC); |
465 outputKind == OutputKind.BASIC); |
453 String errorLine = posKind.getOutput(outputKind) + |
466 String errorLine = posKind.getOutput(outputKind) + |
454 errorKind.getOutput(outputKind, summaryIndent, detailsIndent); |
467 errorKind.getOutput(outputKind, summaryIndent, detailsIndent); |
455 if (xdiagsCompact != XDiagsCompact.COMPACT) |
468 if (xdiagsCompact != XDiagsCompact.COMPACT) |
456 errorLine += multiKind.getOutput(outputKind, errorKind, multiPolicy, summaryIndent, detailsIndent, subdiagsIndent); |
469 errorLine += multiKind.getOutput(outputKind, errorKind, multiPolicy, |
|
470 summaryIndent, detailsIndent, subdiagsIndent); |
457 String[] lines = errorLine.split("\n"); |
471 String[] lines = errorLine.split("\n"); |
458 if (xdiagsCompact == XDiagsCompact.COMPACT) { |
472 if (xdiagsCompact == XDiagsCompact.COMPACT) { |
459 errorLine = lines[0]; |
473 errorLine = lines[0]; |
460 lines = new String[] {errorLine}; |
474 lines = new String[] {errorLine}; |
461 } |
475 } |