package com.netflix.governator.guice; import java.util.Collection; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Stage; import com.netflix.governator.lifecycle.ClasspathScanner; /** * Decorator for LifecycleInjectorBuilder which makes the original withModules methods * additive instead of replacing any pre-defined module. This class also acts as a default * implementation for overriding the behavior of LifecycleInjectorBuilder so that code * does not break every time a new method is added. * * @author elandau */ public class DelegatingLifecycleInjectorBuilder implements LifecycleInjectorBuilder { private LifecycleInjectorBuilder delegate; public DelegatingLifecycleInjectorBuilder(LifecycleInjectorBuilder delegate) { this.delegate = delegate; } @Override public LifecycleInjectorBuilder withBootstrapModule(BootstrapModule module) { this.delegate = delegate.withAdditionalBootstrapModules(module); return this; } @Override public LifecycleInjectorBuilder withAdditionalBootstrapModules( BootstrapModule... modules) { this.delegate = delegate.withAdditionalBootstrapModules(modules); return this; } @Override public LifecycleInjectorBuilder withAdditionalBootstrapModules( Iterable<? extends BootstrapModule> modules) { this.delegate = delegate.withAdditionalBootstrapModules(modules); return this; } @Override public LifecycleInjectorBuilder withModules(Module... modules) { this.delegate = delegate.withAdditionalModules(modules); return this; } @Override public LifecycleInjectorBuilder withModules( Iterable<? extends Module> modules) { this.delegate = delegate.withAdditionalModules(modules); return this; } @Override public LifecycleInjectorBuilder withAdditionalModules( Iterable<? extends Module> modules) { this.delegate = delegate.withAdditionalModules(modules); return this; } @Override public LifecycleInjectorBuilder withAdditionalModules(Module... modules) { this.delegate = delegate.withAdditionalModules(modules); return this; } @Override @Deprecated public LifecycleInjectorBuilder withRootModule(Class<?> mainModule) { this.delegate = delegate.withRootModule(mainModule); return this; } @Override public LifecycleInjectorBuilder withModuleClass( Class<? extends Module> module) { this.delegate = delegate.withAdditionalModuleClasses(module); return this; } @Override public LifecycleInjectorBuilder withModuleClasses( Iterable<Class<? extends Module>> modules) { this.delegate = delegate.withAdditionalModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder withModuleClasses( Class<?>... modules) { this.delegate = delegate.withAdditionalModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder withAdditionalModuleClasses( Iterable<Class<? extends Module>> modules) { this.delegate = delegate.withAdditionalModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder withAdditionalModuleClasses(Class<?>... modules) { this.delegate = delegate.withAdditionalModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder ignoringAutoBindClasses( Collection<Class<?>> ignoreClasses) { this.delegate = delegate.ignoringAutoBindClasses(ignoreClasses); return this; } @Override public LifecycleInjectorBuilder ignoringAllAutoBindClasses() { this.delegate = delegate.ignoringAllAutoBindClasses(); return this; } @Override public LifecycleInjectorBuilder requiringExplicitBindings() { this.delegate = delegate.requiringExplicitBindings(); return this; } @Override public LifecycleInjectorBuilder usingBasePackages(String... basePackages) { this.delegate = delegate.usingBasePackages(basePackages); return this; } @Override public LifecycleInjectorBuilder usingBasePackages( Collection<String> basePackages) { this.delegate = delegate.usingBasePackages(basePackages); return this; } @Override public LifecycleInjectorBuilder usingClasspathScanner( ClasspathScanner scanner) { this.delegate = delegate.usingClasspathScanner(scanner); return this; } @Override public LifecycleInjectorBuilder inStage(Stage stage) { this.delegate = delegate.inStage(stage); return this; } @Override public LifecycleInjectorBuilder withMode(LifecycleInjectorMode mode) { this.delegate = delegate.withMode(mode); return this; } @Override public LifecycleInjectorBuilder withModuleTransformer( ModuleTransformer transformer) { this.delegate = delegate.withModuleTransformer(transformer); return this; } @Override public LifecycleInjectorBuilder withModuleTransformer( Collection<? extends ModuleTransformer> transformers) { this.delegate = delegate.withModuleTransformer(transformers); return this; } @Override public LifecycleInjectorBuilder withModuleTransformer( ModuleTransformer... transformers) { this.delegate = delegate.withModuleTransformer(transformers); return this; } @Override public LifecycleInjectorBuilder withPostInjectorAction( PostInjectorAction action) { this.delegate = delegate.withPostInjectorAction(action); return this; } @Override public LifecycleInjectorBuilder withPostInjectorActions( Collection<? extends PostInjectorAction> actions) { this.delegate = delegate.withPostInjectorActions(actions); return this; } @Override public LifecycleInjectorBuilder withPostInjectorActions( PostInjectorAction... actions) { this.delegate = delegate.withPostInjectorActions(actions); return this; } @Override public LifecycleInjectorBuilder withoutModuleClasses( Iterable<Class<? extends Module>> modules) { this.delegate = delegate.withoutModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder withoutModuleClasses( Class<? extends Module>... modules) { this.delegate = delegate.withoutModuleClasses(modules); return this; } @Override public LifecycleInjectorBuilder withoutModuleClass( Class<? extends Module> module) { this.delegate = delegate.withoutModuleClass(module); return this; } @Override public LifecycleInjector build() { return delegate.build(); } @Override @Deprecated public Injector createInjector() { return delegate.createInjector(); } }