/** Inject dynamically. */ private void injectDynamically() { injectionRequestProcessor.injectMembers(); stopwatch.resetAndLog("Static member injection"); initializer.injectAll(errors); stopwatch.resetAndLog("Instance injection"); errors.throwCreationExceptionIfErrorsExist(); for (InjectorShell shell : shells) { loadEagerSingletons(shell.getInjector(), stage, errors); } stopwatch.resetAndLog("Preloading singletons"); errors.throwCreationExceptionIfErrorsExist(); }
/** Initialize statically. */ private void initializeStatically() { bindingProcesor.initializeBindings(); stopwatch.resetAndLog("Binding initialization"); for (InjectorShell shell : shells) { shell.getInjector().index(); } stopwatch.resetAndLog("Binding indexing"); injectionRequestProcessor.process(shells); stopwatch.resetAndLog("Collecting injection requests"); bindingProcesor.runCreationListeners(); stopwatch.resetAndLog("Binding validation"); injectionRequestProcessor.validate(); stopwatch.resetAndLog("Static validation"); initializer.validateOustandingInjections(errors); stopwatch.resetAndLog("Instance member validation"); new LookupProcessor(errors).process(shells); for (InjectorShell shell : shells) { ((DeferredLookups) shell.getInjector().lookups).initialize(errors); } stopwatch.resetAndLog("Provider verification"); for (InjectorShell shell : shells) { if (!shell.getElements().isEmpty()) { throw new AssertionError("Failed to execute " + shell.getElements()); } } errors.throwCreationExceptionIfErrorsExist(); }
/** * Builds the. * * @return the injector */ Injector build() { if (shellBuilder == null) { throw new AssertionError("Already built, builders are not reusable."); } synchronized (shellBuilder.lock()) { shells = shellBuilder.build(initializer, bindingProcesor, stopwatch, errors); stopwatch.resetAndLog("Injector construction"); initializeStatically(); } if (stage == Stage.TOOL) { return new ToolStageInjector(primaryInjector()); } injectDynamically(); return primaryInjector(); }