void loadPlugin(Plugin plugin) {

    if (FindBugs.DEBUG) {
      System.out.println("Loading " + plugin.getPluginId());
    }
    pluginByIdMap.put(plugin.getPluginId(), plugin);

    setGlobalOptions();

    // Register all of the detectors that this plugin contains
    for (DetectorFactory factory : plugin.getDetectorFactories()) {
      registerDetector(factory);
    }

    for (BugCategory bugCategory : plugin.getBugCategories()) {
      registerBugCategory(bugCategory);
    }

    // Register the BugPatterns
    for (BugPattern bugPattern : plugin.getBugPatterns()) {
      registerBugPattern(bugPattern);
    }

    // Register the BugCodes
    for (BugCode bugCode : plugin.getBugCodes()) {
      registerBugCode(bugCode);
    }
    for (CloudPlugin cloud : plugin.getCloudPlugins()) {
      registerCloud(cloud);
    }
  }
  void unLoadPlugin(Plugin plugin) {
    pluginByIdMap.remove(plugin.getPluginId());

    setGlobalOptions();

    for (DetectorFactory factory : plugin.getDetectorFactories()) {
      unRegisterDetector(factory);
    }
    for (BugCategory bugCategory : plugin.getBugCategories()) {
      unRegisterBugCategory(bugCategory);
    }
    for (BugPattern bugPattern : plugin.getBugPatterns()) {
      unRegisterBugPattern(bugPattern);
    }
    for (BugCode bugCode : plugin.getBugCodes()) {
      unRegisterBugCode(bugCode);
    }
    for (CloudPlugin cloud : plugin.getCloudPlugins()) {
      unRegisterCloud(cloud);
    }
  }