user1940676 user1940676 - 1 year ago 2505
Android Question

Dagger 2.2 component builder module method deprecated

I started using dagger 2.2 and the module methods in the Component builder are deprecated.

This is my Application component :

@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(Application application);

And the Application module:

public class ApplicationModule {
Application application;

public ApplicationModule(Application application) {
this.application = application;

Application providesApplication() {
return application;

Here is the generated class:

value = "dagger.internal.codegen.ComponentProcessor",
comments = ""
public final class DaggerApplicationComponent implements ApplicationComponent {
private DaggerApplicationComponent(Builder builder) {
assert builder != null;

public static Builder builder() {
return new Builder();

public static ApplicationComponent create() {
return builder().build();

public void inject(Application application) {

public static final class Builder {
private Builder() {}

public ApplicationComponent build() {
return new DaggerApplicationComponent(this);

* @deprecated This module is declared, but an instance is not used in the component. This method is a no-op. For more, see
public Builder applicationModule(ApplicationModule applicationModule) {
return this;

How do I initialize the component if not with the ComponentBuilder?

Answer Source

You should read the description of why it is deprecated. If you are using an IDE like IntelliJ or Android Studio you can just select the method and hit Control + Q on Windows to read the Javadoc including the deprecation notice.

The Javadoc reads:

@deprecated This module is declared, but an instance is not used in the component. This method is a no-op. For more, see

And from this link you can see:

When the Dagger processor generates components, it only requires instances of modules and component dependencies that are explicitly needed to supply requests for a binding.

  • If all of a module‚Äôs methods that are used in the component are static, Dagger does not need an instance of that module at all. Dagger can invoke the static methods directly without a module.
  • If a module provides no bindings for a Component, no instance of that module is necessary to construct the graph.

It is safe to say that you can just ignore the deprecation. It is intended to notify you of unused methods and modules. As soon as you actually require / use Application somewhere in your subgraph the module is going to be needed, and the deprecation warning will go away.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download