code: public List<File> listPluginArchives(PluginManager pm) throws IOException {
          List<File> r = new ArrayList<>();
  
          // the ordering makes sure that during the debugging we get proper precedence among duplicates.
          // for example, while doing "mvn jpi:run" or "mvn hpi:run" on a plugin that's bundled with Jenkins, we want to the
          // *.jpl file to override the bundled jpi/hpi file.
          getBundledPluginsFromProperty(r);
  
          // similarly, we prefer *.jpi over *.hpi
          listPluginFiles(pm, ".jpl", r); // linked plugin. for debugging.
          listPluginFiles(pm, ".hpl", r); // linked plugin. for debugging. (for backward compatibility)
          listPluginFiles(pm, ".jpi", r); // plugin jar file
          listPluginFiles(pm, ".hpi", r); // plugin jar file (for backward compatibility)
  
          return r;
      }
docs: Returns the list of *.jpi, *.hpi and *.hpl to expand and load.
  
  <p>
  Normally we look at {@code $JENKINS_HOME/plugins/*.jpi} and *.hpi and *.hpl.
  
  @return
  never null but can be empty. The list can contain different versions of the same plugin,
  and when that happens, Jenkins will ignore all but the first one in the list.