private void bindParameterAnnotations(Annotation[][] parameterAnnotations) { for ( Annotation[] annotations : parameterAnnotations ) { bindAnnotations(annotations); } }
@Override protected void configure() { bindAutoBindSingletons(); bindAutoBindConstructors(); bindAutoBindMethods(); bindAutoBindFields(); }
private void bindAnnotations(Annotation[] annotations) { for ( Annotation annotation : annotations ) { AutoBindProvider autoBindProvider = getAutoBindProvider(annotation); if ( autoBindProvider != null ) { //noinspection unchecked autoBindProvider.configure(binder(), annotation); } } }
Class<?> annotationBaseClass = getAnnotationBaseClass(annotation); if ( annotationBaseClass != Void.class ) // AutoBindSingleton.class is used as a marker to mean "default" because annotation defaults cannot be null Object foundBindingClass = searchForBaseClass(clazz, annotationBaseClass, Sets.newHashSet()); if ( foundBindingClass == null ) Multibinder<?> multibinder = Multibinder.newSetBinder(binder(), (Class)foundBindingClass); applyScope( multibinder .addBinding() applyScope( binder() .withSource(getCurrentStackElement()) .bind((Class)foundBindingClass) .to(clazz), Multibinder<?> multibinder = Multibinder.newSetBinder(binder(), typeLiteral); applyScope( multibinder .addBinding() applyScope( binder() .withSource(getCurrentStackElement()) .bind(typeLiteral).to(clazz), clazz, annotation);
@SuppressWarnings("unchecked") private void bindAutoBindSingletons() { for ( Class<?> clazz : classpathScanner.getClasses() ) { if ( ignoreClasses.contains(clazz) || !clazz.isAnnotationPresent(AutoBindSingleton.class) ) { continue; } AutoBindSingleton annotation = clazz.getAnnotation(AutoBindSingleton.class); if ( javax.inject.Provider.class.isAssignableFrom(clazz) ) { Preconditions.checkState(annotation.value() == Void.class, "@AutoBindSingleton value cannot be set for Providers"); Preconditions.checkState(annotation.baseClass() == Void.class, "@AutoBindSingleton value cannot be set for Providers"); Preconditions.checkState(!annotation.multiple(), "@AutoBindSingleton(multiple=true) value cannot be set for Providers"); LOG.info("Installing @AutoBindSingleton " + clazz.getName()); ProviderBinderUtil.bind(binder(), (Class<javax.inject.Provider>)clazz, Scopes.SINGLETON); } else if ( Module.class.isAssignableFrom(clazz) ) { // Modules are handled by {@link InteranlAutoBindModuleBootstrapModule} continue; } else { bindAutoBindSingleton(annotation, clazz); } } }
private void bindAutoBindMethods() { for ( Method method : classpathScanner.getMethods() ) { if ( ignoreClasses.contains(method.getDeclaringClass()) ) { continue; } bindParameterAnnotations(method.getParameterAnnotations()); } }
localModules.add(new InternalAutoBindModule(injector, scanner, localIgnoreClasses));
private void bindAutoBindConstructors() { for ( Constructor constructor : classpathScanner.getConstructors() ) { if ( ignoreClasses.contains(constructor.getDeclaringClass()) ) { continue; } bindParameterAnnotations(constructor.getParameterAnnotations()); } }
private void bindAutoBindFields() { for ( Field field : classpathScanner.getFields() ) { if ( ignoreClasses.contains(field.getDeclaringClass()) ) { continue; } bindAnnotations(field.getDeclaredAnnotations()); } }