private void resolveFeature(ConfigModelStack configStack, FeatureConfig fc) throws ProvisioningException {
final FeaturePackRuntimeBuilder originalOrigin = currentOrigin;
final ResolvedFeatureSpec spec = getFeatureSpec(fc.getSpecId().getName(), true);
final ResolvedFeature originalParent = parentFeature;
try {
final ResolvedFeatureId resolvedId = parentFeature == null ? spec.resolveFeatureId(fc.getParams())
: spec.resolveIdFromForeignKey(parentFeature.id, fc.getParentRef(), fc.getParams());
if (configStack.isFilteredOut(spec.id, resolvedId)) {
return;
}
parentFeature = resolveFeatureDepsAndRefs(configStack, spec, resolvedId,
spec.resolveNonIdParams(parentFeature == null ? null : parentFeature.id, fc.getParentRef(), fc.getParams()),
fc.getFeatureDeps());
if (fc.hasUnsetParams()) {
parentFeature.unsetAllParams(fc.getUnsetParams(), true);
}
if (fc.hasResetParams()) {
parentFeature.resetAllParams(fc.getResetParams());
}
} finally {
currentOrigin = originalOrigin;
}
processConfigItemContainer(fc);
parentFeature = originalParent;
}