Skip to content

atomashpolskiy/guice-multibinder-dependency-cycle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Guice does not detect dependency cycles that involve multibinders.

E.g. for the following chain of dependencies Guice does not detect the dependency cycle: S1 -> Multibinder<C1> -> C1Impl -> S1. This leads to a ProvisionException encapsulating java.lang.NullPointerException.

public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new M1());
        injector.getInstance(S1.class);
    }
}

class S1 {}
interface C1 {}

class M1 extends AbstractModule {
    @Override
    public void configure() {
        binder().bind(S1.class).toProvider(S1Provider.class);
        Multibinder.newSetBinder(binder(), C1.class).addBinding().to(C1Impl.class);
    }

    public static class C1Impl implements C1 {
        @Inject
        private S1 s1; // intentional dependency cycle: C1Impl -> S1 -> C1
    }
}

class S1Provider implements Provider<S1> {
    @Inject
    private Set<C1> c1s;

    @Override
    public S1 get() {
        c1s.size(); // <--- triggers java.lang.NullPointerException
        return new S1();
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages