@Override public boolean canValidate(final Injectable injectable) { return !injectable.loadAsync(); }
@Override public void validate(final Injectable injectable, final Collection<String> problems) { for (final Dependency dep : injectable.getDependencies()) { if (dep.getInjectable().loadAsync()) { problems.add("The bean " + injectable + " is not @LoadAsync but depends on the @LoadAsync bean " + dep.getInjectable()); } } } }
private void declareAndProcessInjectable(final IOCProcessingContext processingContext, final Map<Class<? extends Annotation>, MetaClass> scopeContexts, @SuppressWarnings("rawtypes") final BlockBuilder curMethod, final Injectable injectable) { if (injectionContext.isAsync() && injectable.loadAsync()) { final MetaClass factoryClass = addFactoryDeclaration(injectable, processingContext); registerAsyncFactory(injectable, processingContext, curMethod, factoryClass); } else { declareAndRegisterConcreteInjectable(injectable, processingContext, scopeContexts, curMethod); } }
private void registerAsyncFactory(final Injectable injectable, final IOCProcessingContext processingContext, @SuppressWarnings("rawtypes") final BlockBuilder curMethod, final MetaClass factoryClass) { final Statement handle = generateFactoryHandle(injectable, curMethod); final Statement loader = generateFactoryLoader(injectable, factoryClass); curMethod.append(loadVariable("asyncBeanManagerSetup").invoke("registerAsyncBean", handle, loader)); for (final Dependency dep : injectable.getDependencies()) { if (dep.getInjectable().loadAsync()) { curMethod.append(loadVariable("asyncBeanManagerSetup").invoke("registerAsyncDependency", injectable.getFactoryName(), dep.getInjectable().getFactoryName())); } } }