docs: private Map<String, ProvisioningFeatureDefinition> getProductExtFeatureDefinitions(String productName) {
          readProductExtFeatureLocations();
          Map<String, ProvisioningFeatureDefinition> features = null;
  
          BundleRepositoryHolder featureData = BundleRepositoryRegistry.getRepositoryHolder(productName);
          if (featureData != null) {
              File productInstallDir = new File(featureData.getInstallDir());
  
              if (productInstallDir.exists()) {
                  File featuresDir = new File(productInstallDir, FEATURE_DIR);
                  if (featuresDir.exists()) {
                      features = new TreeMap<String, ProvisioningFeatureDefinition>();
                      File[] productManifestFiles = featuresDir.listFiles(MFFilter);
                      if (productManifestFiles != null) {
                          for (File productManifestFile : productManifestFiles) {
                              try {
                                  ProvisioningFeatureDefinition fd = new SubsystemFeatureDefinitionImpl(productName, productManifestFile);
                                  features.put(fd.getSymbolicName(), fd);
                              } catch (IOException e) {
                                  // TODO: PROPER NLS MESSAGE
                                  throw new FeatureToolException("Unable to read feature manifest from product extension: " + productManifestFile,
                                                                 (String) null,
                                                                 e,
                                                                 ReturnCode.BAD_FEATURE_DEFINITION);
                              }
                          }
                      }
                  }
              }
          }
  
          return features;
      }