-
Notifications
You must be signed in to change notification settings - Fork 102
Description
Given a class defined as
@CircuitInject(AddressBookScreen::class, AppScope::class)
class AddressBookPresenter @Inject constructor(
private val navigator: Navigator,
private val addressBookClient: AddressBookClient,
private val database: Database,
) : Presenter<AddressBookScreen.AddressBookScreenState>this generates a PresenterFactory that does not pass in the navigator correctly and therefore says there is a binding error
@Inject
@ContributesIntoSet(AppScope::class)
public class AddressBookPresenterFactory(
private val provider: Provider<AddressBookPresenter>,
) : Presenter.Factory {
override fun create(
screen: Screen,
navigator: Navigator,
context: CircuitContext,
): Presenter<*>? = when (screen) {
AddressBookScreen -> provider()
else -> null
}
}Result
[Metro/MissingBinding] Cannot find an @Inject constructor or @Provides-annotated function/property for: com.slack.circuit.runtime.Navigator
com.slack.circuit.runtime.Navigator is injected at
[common.AppComponent] common.features.address.AddressBookPresenter(…, navigator)
If I edit my presenter to mark navigator as @Assisted and provide the assisted factory
@AssistedFactory
fun interface Factory {
fun create(navigator: Navigator): AddressBookPresenter
}I then get an error from the generator
[ksp] java.util.NoSuchElementException: Sequence is empty.
at kotlin.sequences.SequencesKt___SequencesKt.single(_Sequences.kt:337)
at com.slack.circuit.codegen.CircuitSymbolProcessor.computeFactoryData(CircuitSymbolProcessorProvider.kt:432)
at com.slack.circuit.codegen.CircuitSymbolProcessor.generateFactory(CircuitSymbolProcessorProvider.kt:135)
at com.slack.circuit.codegen.CircuitSymbolProcessor.process(CircuitSymbolProcessorProvider.kt:95)