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; }