private ChainSpecification resolveChain(Deque<ComponentId> path, Resolver<ChainSpecification> allChainSpecifications, ComponentSpecification chainSpecification) { ChainSpecification chain = allChainSpecifications.resolve(chainSpecification); if (chain == null) { throw new RuntimeException("Missing chain '" + chainSpecification + "'."); } else if (path.contains(chain.componentId)) { throw new RuntimeException("The chain " + chain.componentId + " inherits(possibly indirectly) from itself."); } else { return chain; } }