Files
kotlin-fork/compiler/frontend.common
Dmitriy Novozhilov 73b608608a [FIR] Optimize PendingDiagnosticsCollectorWithSuppress
PendingDiagnosticsCollectorWithSuppress is a special diagnostic collector,
  which aggregates diagnostics reported during checking of some specific
  element before actually reporting them, so its workflow looks like this:

- start checking some element;
- all reported diagnostics go to `pendingDiagnosticsByFilePath` map;
- all checkers done their jobs;
- diagnostics from `pendingDiagnosticsByFilePath` go to the resulting map
  of all diagnostics (not all, only ones which lay inside the checked
  according to PSI);
- processed diagnostics removed from `pendingDiagnosticsByFilePath`

This approach works fine, but there was one problem with it:
  `pendingDiagnosticsByFilePath` is not just a list of diagnostic, but
  map of lists, grouped by the containing file. And only those lists
  actually get cleared. But if some list was completely emptied, it still
  remained in the original `pendingDiagnosticsByFilePath` map
This led to the performance problem in case, where there are no actual
  diagnostics in the `pendingDiagnosticsByFilePath`, but the map itself
  is not empty but full of empty lists. So collector iterated over this
  map on each visiting of each element
And after KT-58881 this problem was uncovered, as number of visits of
  elements was twiced (because now we iterate over the whole tree twice,
  with Common and Platform checkers)

The fix is quite trivial -- if some list in `pendingDiagnosticsByFilePath`
  becomes empty, remove it from the map

^KT-65579 Fixed
2024-02-13 12:07:41 +00:00
..
2023-08-25 14:10:37 +00:00