private void bootstrapContainer(final IOCProcessingContext processingContext, final DependencyGraph dependencyGraph,
final Set<MetaClass> scopeContextSet, final Statement[] contextLocalVarInvocation,
final String contextManagerFieldName) {
processingContext.getBlockBuilder()
.appendAll(contextLocalVarDeclarations(scopeContextSet))
.append(loadVariable("logger").invoke("debug", "Registering factories with contexts."))
.append(declareVariable("start", long.class, currentTime()))
.append(loadVariable("this").invoke("registerFactories", (Object[]) contextLocalVarInvocation))
.append(loadVariable("logger").invoke("debug",
"Registered " + dependencyGraph.getNumberOfInjectables() + " factories in {}ms", subtractFromCurrentTime(loadVariable("start"))))
.append(loadVariable("logger").invoke("debug", "Adding contexts to context manager..."))
.append(loadVariable("start").assignValue(currentTime()));
addContextsToContextManager(scopeContextSet, contextManagerFieldName, processingContext.getBlockBuilder());
processingContext.getBlockBuilder()
.append(loadVariable("logger").invoke("debug",
"Added " + scopeContextSet.size() + " contexts in {}ms", subtractFromCurrentTime(loadVariable("start"))))
.append(loadVariable("logger").invoke("debug", "Calling finishInit on " + ContextManager.class.getSimpleName()))
.append(loadVariable("start").assignValue(currentTime()));
callFinishInitOnContextManager(contextManagerFieldName, processingContext.getBlockBuilder());
processingContext.getBlockBuilder()
.append(loadVariable("logger").invoke("debug",
"ContextManager#finishInit ran in {}ms", subtractFromCurrentTime(loadVariable("start"))));
}