private void checkThreadViolations(@Nullable Component c) {
    if (!SwingUtilities.isEventDispatchThread() && (c == null || c.isShowing())) {
      final Exception exception = new Exception();
      StackTraceElement[] stackTrace = exception.getStackTrace();

      if (isAllowedViolation(c, stackTrace)) return;

      String categoriesString = Registry.stringValue("non.edt.swing.report.categories");
      List<String> categories = StringUtil.split(categoriesString, ",");
      if (shouldIgnoreStacktrace(categories, stackTrace)) return;

      LOG.warn("Access to realized (ever shown) UI components should be done only from the AWT event dispatch thread," +
               " revalidate(), invalidate() & repaint() is ok from any thread", exception);
    }
  }
private void checkThreadViolations(@Nullable Component c)