docs: private JPanel createFilterPane() {
          JButton addButton = new JButton(edu.umd.cs.findbugs.L10N.getLocalString("dlg.add_dot_btn", "Add..."));
          JButton removeButton = new JButton(edu.umd.cs.findbugs.L10N.getLocalString("dlg.remove_btn", "Remove"));
          JButton removeAllButton = new JButton(edu.umd.cs.findbugs.L10N.getLocalString("dlg.remove_all_btn", "Remove All"));
          JPanel filterPanel = new JPanel();
          filterPanel.setLayout(new GridBagLayout());
          GridBagConstraints gbc = new GridBagConstraints();
  
          gbc.gridheight = 1;
          gbc.gridwidth = 1;
          gbc.gridx = 0;
          gbc.gridy = 0;
          gbc.fill = GridBagConstraints.BOTH;
          gbc.weightx = 1;
          gbc.weighty = 1;
          filterPanel.add(new JLabel("<HTML>These rules control which bugs are shown and which are hidden in this project"), gbc);
  
          gbc.gridheight = 4;
          gbc.gridwidth = 1;
          gbc.gridx = 0;
          gbc.gridy = 1;
          gbc.fill = GridBagConstraints.BOTH;
          gbc.weightx = 1;
          gbc.weighty = 1;
          filterPanel.add(new JScrollPane(filterCheckBoxList), gbc);
          updateFilterPanel();
  
          gbc.gridheight = 1;
          gbc.gridx = 1;
          gbc.gridy = 1;
          gbc.fill = GridBagConstraints.HORIZONTAL;
          gbc.weightx = 0;
          gbc.weighty = 0;
          filterPanel.add(addButton, gbc);
          addButton.addActionListener(evt -> NewFilterFrame.open());
  
          gbc.gridy = 2;
          gbc.insets = new Insets(5, 0, 0, 0);
          filterPanel.add(removeButton, gbc);
          removeButton.addActionListener(evt -> {
              List<MatchBox> selected = filterCheckBoxList.getSelectedValuesList();
              if (selected.isEmpty()) {
                  return;
              }
              for (MatchBox box : selected) {
                  MainFrame.getInstance().getProject().getSuppressionFilter().removeChild(box.getMatcher());
              }
              FilterActivity.notifyListeners(FilterListener.Action.UNFILTERING, null);
              MainFrame.getInstance().setProjectChanged(true);
              updateFilterPanel();
          });
          gbc.gridy = 3;
          gbc.weighty = 0;
          gbc.insets = new Insets(5, 0, 0, 0);
          filterPanel.add(removeAllButton, gbc);
          removeAllButton.addActionListener(evt -> {
              boolean needsRebuild = false;
              Filter suppressionFilter = MainFrame.getInstance().getProject().getSuppressionFilter();
              if (!suppressionFilter.isEmpty()) {
                  needsRebuild = true;
              }
              suppressionFilter.clear();
  
              if (needsRebuild) {
                  // filters being cleared were disabled
                  FilterActivity.notifyListeners(FilterListener.Action.UNFILTERING, null);
              }
              MainFrame.getInstance().setProjectChanged(true);
              updateFilterPanel();
          });
          gbc.gridy = 4;
          gbc.weighty = 1;
          gbc.insets = new Insets(0, 0, 0, 0);
          filterPanel.add(Box.createGlue(), gbc);
  
          return filterPanel;
      }