void add(ModelBuilder<?, ?> mb) { final ImmutableSet<Class<?>> deps = mb.getDependencies(); final Dependency dep = new Dependency(this, mb, deps); modelTypeMap.put(mb.getAssociatedType(), dep); for (final Class<?> clz : mb.getProvidingTypes()) { checkArgument(!providerMap.containsKey(clz), "A provider for %s already exists: %s.", clz, providerMap.get(clz)); providerMap.put(clz, dep); } dependencyMap.putAll(dep, deps); verify(!builders.contains(dep)); builders.add(dep); }
boolean allResolved = true; for (final Dependency dependency : dependencies) { allResolved &= dependency.isResolved(); dep.build(); toRemove.add(dep); builder.add(cmb.build());
@Override @Nonnull public <T> T get(Class<T> type) { return providerMap.get(type).build().get(type); }
Dependency(DependencyProvider dp, ModelBuilder<?, ?> mb, ImmutableSet<Class<?>> deps) { modelBuilder = mb; dependencyProvider = new DependencyProviderAccessDecorator(dp, deps, mb); if (deps.isEmpty()) { build(); } }