@Override public void generate(final ClassStructureBuilder<?> bodyBlockBuilder, final Injectable injectable, final DependencyGraph graph, final InjectionContext injectionContext, final TreeLogger logger, final GeneratorContext context) { controller = new FactoryController(injectable.getInjectedType(), injectable.getFactoryName(), bodyBlockBuilder.getClassDefinition()); preGenerationHook(bodyBlockBuilder, injectable, graph, injectionContext); final List<Statement> factoryInitStatements = generateFactoryInitStatements(bodyBlockBuilder, injectable, graph, injectionContext); final List<Statement> createInstanceStatements = generateCreateInstanceStatements(bodyBlockBuilder, injectable, graph, injectionContext); final List<Statement> destroyInstanceStatements = generateDestroyInstanceStatements(bodyBlockBuilder, injectable, graph, injectionContext); final List<Statement> invokePostConstructStatements = generateInvokePostConstructsStatements(bodyBlockBuilder, injectable, graph, injectionContext); implementConstructor(bodyBlockBuilder, injectable); maybeImplementFactoryInit(bodyBlockBuilder, injectable, factoryInitStatements); implementCreateInstance(bodyBlockBuilder, injectable, createInstanceStatements); maybeImplementDestroyInstance(bodyBlockBuilder, injectable, destroyInstanceStatements); maybeImplementInvokePostConstructs(bodyBlockBuilder, injectable, invokePostConstructStatements); maybeImplementCreateProxy(bodyBlockBuilder, injectable); addPrivateAccessors(bodyBlockBuilder); }