MCPcopy Create free account
hub / github.com/google/guice / configure

Method configure

core/src/com/google/inject/util/Modules.java:212–357  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

210 }
211
212 @Override
213 public void configure() {
214 Binder baseBinder = binder();
215 List<Element> baseElements = Elements.getElements(currentStage(), baseModules);
216
217 // If the sole element was a PrivateElements, we want to override
218 // the private elements within that -- so refocus our elements
219 // and binder.
220 if (baseElements.size() == 1) {
221 Element element = Iterables.getOnlyElement(baseElements);
222 if (element instanceof PrivateElements) {
223 PrivateElements privateElements = (PrivateElements) element;
224 PrivateBinder privateBinder =
225 baseBinder.newPrivateBinder().withSource(privateElements.getSource());
226 for (Key<?> exposed : privateElements.getExposedKeys()) {
227 privateBinder.withSource(privateElements.getExposedSource(exposed)).expose(exposed);
228 }
229 baseBinder = privateBinder;
230 baseElements = privateElements.getElements();
231 }
232 }
233
234 final Binder binder = baseBinder.skipSources(this.getClass());
235 final ImmutableSet<Element> elements = ImmutableSet.copyOf(baseElements);
236 final Module scannersModule = extractScanners(elements);
237 final List<Element> overrideElements =
238 Elements.getElements(
239 currentStage(),
240 ImmutableList.<Module>builder().addAll(overrides).add(scannersModule).build());
241
242 final Set<Key<?>> overriddenKeys = Sets.newHashSet();
243 final Map<Class<? extends Annotation>, ScopeBinding> overridesScopeAnnotations =
244 Maps.newHashMap();
245
246 // execute the overrides module, keeping track of which keys and scopes are bound
247 new ModuleWriter(binder) {
248 @Override
249 public <T> Void visit(Binding<T> binding) {
250 overriddenKeys.add(binding.getKey());
251 return super.visit(binding);
252 }
253
254 @Override
255 public Void visit(ScopeBinding scopeBinding) {
256 overridesScopeAnnotations.put(scopeBinding.getAnnotationType(), scopeBinding);
257 return super.visit(scopeBinding);
258 }
259
260 @Override
261 public Void visit(PrivateElements privateElements) {
262 overriddenKeys.addAll(privateElements.getExposedKeys());
263 return super.visit(privateElements);
264 }
265 }.writeAll(overrideElements);
266
267 // execute the original module, skipping all scopes and overridden keys. We only skip each
268 // overridden binding once so things still blow up if the module binds the same thing
269 // multiple times.

Callers

nothing calls this directly

Calls 15

getElementsMethod · 0.95
newPrivateBinderMethod · 0.95
getExposedKeysMethod · 0.95
withSourceMethod · 0.95
getExposedSourceMethod · 0.95
getElementsMethod · 0.95
skipSourcesMethod · 0.95
extractScannersMethod · 0.80
writeAllMethod · 0.80
currentStageMethod · 0.65
withSourceMethod · 0.65
getSourceMethod · 0.65

Tested by

no test coverage detected