@Override protected List<Statement> generateCreateInstanceStatements(final ClassStructureBuilder<?> bodyBlockBuilder, final Injectable injectable, final DependencyGraph graph, final InjectionContext injectionContext) { final Multimap<DependencyType, Dependency> depsByType = separateByType(injectable.getDependencies()); if (depsByType.get(DependencyType.ProducerMember).size() != 1) { throw new RuntimeException("A produced type must have exactly 1 producing instance but " + depsByType.get(DependencyType.ProducerMember).size() + " were found."); } final ProducerInstanceDependency producerInstanceDep = (ProducerInstanceDependency) depsByType.get(DependencyType.ProducerMember).iterator().next(); final Injectable producerInjectable = producerInstanceDep.getInjectable(); final MetaClassMember producingMember = producerInstanceDep.getProducingMember(); if (producingMember instanceof MetaField) { return fieldCreateInstanceStatements((MetaField) producingMember, producerInjectable, injectable, bodyBlockBuilder); } else if (producingMember instanceof MetaMethod) { return methodCreateInstanceStatements((MetaMethod) producingMember, producerInjectable, injectable, depsByType.get(DependencyType.ProducerParameter), bodyBlockBuilder); } else { throw new RuntimeException("Unrecognized producing member: " + producingMember); } }