/** * Attempts to order the referenced features. * * @param feature parent feature * @param refIds referenced features ids * @param specRefs whether these referenced features represent actual spec references or feature dependencies * @return feature ids that form circular dependency loops * @throws ProvisioningException */ private List<CircularRefInfo> orderReferencedFeatures(ResolvedFeature feature, Collection<ResolvedFeatureId> refIds, boolean specRefs, List<CircularRefInfo> circularRefs) throws ProvisioningException { for(ResolvedFeatureId refId : refIds) { final List<CircularRefInfo> newCircularRefs = orderReferencedFeature(feature, refId, specRefs); if(newCircularRefs == null) { continue; } circularRefs = CollectionUtils.addAll(circularRefs, newCircularRefs); } return circularRefs; }