code: void findAutofeatureDependencies() {
          // If the user has requested an autofeature to be resolved, we want to treat the features mentioned in its provisionCapability header as dependencies
          ArrayList<String> autofeatureDependencies = new ArrayList<>();
          for (String featureName : featureNamesToResolve) {
              ProvisioningFeatureDefinition feature = resolverRepository.getFeature(featureName);
              if (feature != null && feature.isAutoFeature() && feature instanceof KernelResolverEsa) {
                  Collection<ProvisioningFeatureDefinition> dependencies = ((KernelResolverEsa) feature).findFeaturesSatisfyingCapability(resolverRepository.getAllFeatures());
                  for (ProvisioningFeatureDefinition dependency : dependencies) {
                      autofeatureDependencies.add(dependency.getSymbolicName());
                  }
              }
          }
  
          featureNamesToResolve.addAll(autofeatureDependencies);
      }
docs: If any of the requested features are auto-features, find the set of features that satisfy their provisionCapability header and add those to the list of feature names to
  resolve.
  <p>
  This is necessary because the kernel resolver will ignore the provision capability header if the feature has been specifically requested, but that's not usually helpful at
  install time.