docs: private Table createDetectorsTableViewer(Composite parent, IProject project) {
          final BugPatternTableSorter sorter = new BugPatternTableSorter(this);
  
          int tableStyle = SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK;
          availableFactoriesTableViewer = CheckboxTableViewer.newCheckList(parent, tableStyle);
          availableFactoriesTableViewer.addCheckStateListener(new ICheckStateListener() {
  
              @Override
              public void checkStateChanged(CheckStateChangedEvent event) {
                  syncUserPreferencesWithTable();
              }
          });
  
          int currentColumnIdx = 0;
          Table factoriesTable = availableFactoriesTableViewer.getTable();
  
          TableColumn factoryNameColumn = createColumn(currentColumnIdx, factoriesTable, getMessage("property.detectorName"), 230,
                  COLUMN.DETECTOR_NAME);
          addColumnSelectionListener(sorter, factoryNameColumn, COLUMN.DETECTOR_NAME);
  
          currentColumnIdx++;
          TableColumn bugsAbbrevColumn = createColumn(currentColumnIdx, factoriesTable, getMessage("property.bugCodes"), 75,
                  COLUMN.BUG_CODES);
          addColumnSelectionListener(sorter, bugsAbbrevColumn, COLUMN.BUG_CODES);
  
          currentColumnIdx++;
          TableColumn speedColumn = createColumn(currentColumnIdx, factoriesTable, getMessage("property.speed"), 70,
                  COLUMN.DETECTOR_SPEED);
          addColumnSelectionListener(sorter, speedColumn, COLUMN.DETECTOR_SPEED);
  
          currentColumnIdx++;
          TableColumn pluginColumn = createColumn(currentColumnIdx, factoriesTable, getMessage("property.provider"), 100,
                  COLUMN.PLUGIN);
          addColumnSelectionListener(sorter, pluginColumn, COLUMN.PLUGIN);
  
          currentColumnIdx++;
          TableColumn categoryColumn = createColumn(currentColumnIdx, factoriesTable, getMessage("property.category"), 75,
                  COLUMN.BUG_CATEGORIES);
          addColumnSelectionListener(sorter, categoryColumn, COLUMN.BUG_CATEGORIES);
  
          factoriesTable.setLinesVisible(true);
          factoriesTable.setHeaderVisible(true);
          // initial sort indicator
          factoriesTable.setSortDirection(sorter.revertOrder ? SWT.UP : SWT.DOWN);
          factoriesTable.setSortColumn(factoryNameColumn);
          sorter.setSortColumnIndex(COLUMN.DETECTOR_NAME);
  
          availableFactoriesTableViewer.setContentProvider(new DetectorFactoriesContentProvider());
          availableFactoriesTableViewer.setLabelProvider(new DetectorFactoryLabelProvider(this));
  
          availableFactoriesTableViewer.setSorter(sorter);
  
          populateAvailableRulesTable(project);
          factoriesTable.setEnabled(true);
  
          return factoriesTable;
      }