private void updateSpecializedReferenceLinks(final InjectableImpl specialization, final Set<InjectableImpl> toBeRemoved, final InjectableReference injectableReference) { assert injectableReference.linked.size() == 1 : "The injectable " + injectableReference + " should have one link but instead has:\n" + injectableReference.linked; final InjectableImpl specialized = (InjectableImpl) injectableReference.linked.iterator().next(); specialization.qualifier = qualFactory.combine(specialization.qualifier, specialized.qualifier); toBeRemoved.add(specialized); injectableReference.linked.clear(); injectableReference.linked.add(lookupInjectableReference(specialization.type, specialization.qualifier)); removeLinksToProducedTypes(specialized, toBeRemoved); }
private void removeSpecializedAndSpecializingLinks(final InjectableImpl specialization, final Set<InjectableImpl> toBeRemoved, final MetaClass specializingType, final MetaClass enclosingType, final Iterator<InjectableBase> linkedIter, final InjectableImpl linkedInjectable) { if (linkedInjectable.injectableType.equals(InjectableType.Producer)) { final MetaClass foundProducerType = GraphUtil.findProducerInstanceDep(linkedInjectable).injectable.type.getErased(); if (foundProducerType.equals(enclosingType.getErased()) || foundProducerType.equals(specializingType.getErased())) { linkedIter.remove(); } if (foundProducerType.equals(enclosingType.getErased())) { toBeRemoved.add(linkedInjectable); specialization.qualifier = qualFactory.combine(specialization.qualifier, linkedInjectable.qualifier); } } }