Skip to content

Share a single SwitchingProvider instance across SingleCheck and DoubleCheck providers in fastInit mode. - #5262

Open
copybara-service[bot] wants to merge 1 commit into
masterfrom
test_944582946
Open

Share a single SwitchingProvider instance across SingleCheck and DoubleCheck providers in fastInit mode.#5262
copybara-service[bot] wants to merge 1 commit into
masterfrom
test_944582946

Conversation

@copybara-service

Copy link
Copy Markdown

Share a single SwitchingProvider instance across SingleCheck and DoubleCheck providers in fastInit mode.

Previously in Dagger's fastInit mode, each scoped provider (SingleCheck, DoubleCheck) or assisted factory instantiated a dedicated SwitchingProvider instance:

    this.fooFactoryProvider = SingleCheck.provider(new SwitchingProvider<>(testComponentImpl, 0));

This change introduces dagger.internal.SwitchingProvider and shares a single SwitchingProvider instance across all scoped and assisted factory bindings within a component:

  1. Introduce the dagger.internal.SwitchingProvider<T> interface with a parameterized T get(int id) method.
  2. Add provider(SwitchingProvider<?>, int) overloads to SingleCheck and DoubleCheck.
  3. In component implementations, generate a single shared private SwitchingProvider<Object> switchingProvider instance initialized in initialize() and passed to SingleCheck.provider and DoubleCheck.provider.
  4. Unscoped bindings continue to instantiate SwitchingProvider directly as a Provider<T>.

This reduces redundant SwitchingProvider object allocations during component initialization in fastInit mode.

RELNOTES=n/a

…leCheck providers in fastInit mode.

Previously in Dagger's fastInit mode, each scoped provider (SingleCheck, DoubleCheck) or assisted factory instantiated a dedicated SwitchingProvider instance:
```java
    this.fooFactoryProvider = SingleCheck.provider(new SwitchingProvider<>(testComponentImpl, 0));
```
This change introduces `dagger.internal.SwitchingProvider` and shares a single `SwitchingProvider` instance across all scoped and assisted factory bindings within a component:
1. Introduce the `dagger.internal.SwitchingProvider<T>` interface with a parameterized `T get(int id)` method.
2. Add `provider(SwitchingProvider<?>, int)` overloads to `SingleCheck` and `DoubleCheck`.
3. In component implementations, generate a single shared `private SwitchingProvider<Object> switchingProvider` instance initialized in `initialize()` and passed to `SingleCheck.provider` and `DoubleCheck.provider`.
4. Unscoped bindings continue to instantiate `SwitchingProvider` directly as a `Provider<T>`.

This reduces redundant SwitchingProvider object allocations during component initialization in fastInit mode.

RELNOTES=n/a
PiperOrigin-RevId: 944582946
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant