docs: private void createExecutionPlan() throws OrderingConstraintException {
          executionPlan = new ExecutionPlan();
  
          // Use user preferences to decide which detectors are enabled.
          DetectorFactoryChooser detectorFactoryChooser = new DetectorFactoryChooser() {
              HashSet<DetectorFactory> forcedEnabled = new HashSet<>();
  
              @Override
              public boolean choose(DetectorFactory factory) {
                  boolean result = FindBugs.isDetectorEnabled(FindBugs2.this, factory, rankThreshold) || forcedEnabled.contains(factory);
                  if (ExecutionPlan.DEBUG) {
                      System.out.printf("  %6s %s %n", result, factory.getShortName());
                  }
                  return result;
              }
  
              @Override
              public void enable(DetectorFactory factory) {
                  forcedEnabled.add(factory);
                  factory.setEnabledButNonReporting(true);
              }
  
          };
          executionPlan.setDetectorFactoryChooser(detectorFactoryChooser);
  
          if (ExecutionPlan.DEBUG) {
              System.out.println("rank threshold is " + rankThreshold);
          }
          // Add plugins
          for (Iterator<Plugin> i = detectorFactoryCollection.pluginIterator(); i.hasNext();) {
              Plugin plugin = i.next();
              if (DEBUG) {
                  System.out.println("Adding plugin " + plugin.getPluginId() + " to execution plan");
              }
              executionPlan.addPlugin(plugin);
          }
  
          // Build the execution plan
          executionPlan.build();
  
          // Stash the ExecutionPlan in the AnalysisCache.
          Global.getAnalysisCache().eagerlyPutDatabase(ExecutionPlan.class, executionPlan);
  
          if (PROGRESS) {
              System.out.println(executionPlan.getNumPasses() + " passes in execution plan");
          }
      }