()
| 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. |
nothing calls this directly
no test coverage detected