docs: private Element parseDesc(final File descFile) {
          try {
              parser.setPluginDir(descFile.getParentFile());
              final Element root = parser.parse(descFile.getAbsoluteFile());
              final Features f = parser.getFeatures();
              final String id = f.getPluginId();
              validatePlugin(f);
              extensionPoints.addAll(f.getExtensionPoints().keySet());
              pluginTable.put(id, f);
              return root;
          } catch (final RuntimeException e) {
              throw e;
          } catch (final SAXParseException e) {
              final RuntimeException ex = new RuntimeException("Failed to parse " + descFile.getAbsolutePath() + ": " + e.getMessage(), e);
              throw ex;
          } catch (final Exception e) {
              throw new RuntimeException(e);
          }
      }