public void run() { Context ctx = new Context(); Options options = Options.instance(ctx); outputKind.init(options); multiPolicy.init(options); xdiagsSource.init(options); xdiagsCompact.init(options); caretKind.init(options); sourceLineKind.init(options); String indentString = ""; indentString = (summaryIndent == IndentKind.CUSTOM) ? "3" : "0"; indentString += (detailsIndent == IndentKind.CUSTOM) ? "|3" : "|0"; indentString += (sourceIndent == IndentKind.CUSTOM) ? "|3" : "|0"; indentString += (subdiagsIndent == IndentKind.CUSTOM) ? "|3" : "|0"; options.put("diagsIndentation", indentString); MyLog log = new MyLog(ctx); JavacMessages messages = JavacMessages.instance(ctx); messages.add("tester"); JCDiagnostic.Factory diags = JCDiagnostic.Factory.instance(ctx); log.useSource(new MyFileObject("This is a source line")); JCDiagnostic d = diags.error(null, log.currentSource(), posKind.pos(), errorKind.key(), "Hello!"); if (multiKind != MultilineKind.NONE) { JCDiagnostic sub = diags.fragment(errorKind.key(), "Hello!"); if (multiKind.isNested()) sub = new JCDiagnostic.MultilineDiagnostic(sub, List.of(sub)); List<JCDiagnostic> subdiags = multiKind.isDouble() ? List.of(sub, sub) : List.of(sub); d = new JCDiagnostic.MultilineDiagnostic(d, subdiags); } String diag = log.getDiagnosticFormatter().format(d, messages.getCurrentLocale()); checkOutput(diag); }