private Map<ResolvedFeatureId, FeatureDependencySpec> resolveFeatureDeps(ConfigModelStack configStack,
Collection<FeatureDependencySpec> featureDeps, final ResolvedFeatureSpec spec)
throws ProvisioningException {
Map<ResolvedFeatureId, FeatureDependencySpec> resolvedDeps = spec.resolveFeatureDeps(this, featureDeps);
if(!resolvedDeps.isEmpty()) {
for(Map.Entry<ResolvedFeatureId, FeatureDependencySpec> dep : resolvedDeps.entrySet()) {
if(!dep.getValue().isInclude()) {
continue;
}
final ResolvedFeatureId depId = dep.getKey();
if(configStack.includes(depId) || configStack.isFilteredOut(depId.specId, depId)) {
continue;
}
final FeatureDependencySpec depSpec = dep.getValue();
final FeaturePackRuntimeBuilder originalFp = setOrigin(depSpec.getOrigin());
try {
resolveFeatureDepsAndRefs(configStack, getFeatureSpec(depId.getSpecId().getName()), depId, Collections.emptyMap(), Collections.emptyList());
} finally {
setOrigin(originalFp);
}
}
}
return resolvedDeps;
}