dave08
01/26/2022, 12:51 PM@get:[Provides Named("foo") Singleton]
val foo: Deferred<String?> = GlobalScope.async { ... }
dave08
01/26/2022, 12:56 PMMarko Novakovic
02/07/2022, 9:33 AMComponent not initialized
when running testsColton Idle
02/16/2022, 2:43 AM@Provides
fun provideApiService( <========== ERROR: error: [Dagger/MissingBinding] okhttp3.Interceptor cannot be provided without an @Provides-annotated method.
@Named("application_interceptors") applicationInterceptors: MutableList<Interceptor>,
@Named("network_interceptors") networkInterceptors: MutableList<Interceptor>,
Providers:
@Provides
@Named("application_interceptors")
fun provideApplicationInterceptorList(
@ApplicationContext context: Context,
): MutableList<Interceptor> {
and
@Provides
@Named("network_interceptors")
fun provideNetworkInterceptorList(
@ApplicationContext context: Context,
): MutableList<Interceptor> {
Sivan
03/03/2022, 8:00 AM@SmallTest
@HiltAndroidTest
class ExpenseDaoTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()
@Inject
@Named("test_db")
lateinit var database: IOUDatabase
private lateinit var expenseDao: ExpenseDao
@Before
fun setup() {
hiltRule.inject()
expenseDao = database.expenseDao()
}
@After
fun tearDown() {
database.close()
}
@Test
fun insertExpense() =
runBlockingTest {
val expense = ExpenseCacheEntity(
id = "1",
title = "Dosa",
date = LocalDate.now(),
amount = 100.00,
description = "",
paid_by = arrayListOf("1A"),
split_with = arrayListOf("1A", "2B")
)
expenseDao.insertExpense(expense)
val getExpense = expenseDao.getExpenseById("1")
assertTrue(getExpense.id == expense.id)
}
}
Any idea how to get across this? Been struggling for more than a day.Ravin Jain
03/03/2022, 9:58 PM@HiltAndroidApp
annotation goes if the client app is not using Hilt.Kareem Radwan
03/07/2022, 11:44 AMmiqbaldc
03/14/2022, 1:11 AM:presentation -> :domain <- :data
// in :domain module
class class AnalyticsUseCase @Inject constructor(
private val repository: AnalyticsRepository,
) {
// omitted
}
// in :data module
@InstallIn(SingletonComponent::class)
@Module
interface BindAnalyticsModule {
@get:[Binds]
val AnalyticsRepositoryImpl.analyticsRepo: AnalyticsRepository
}
internal const val DEFAULT_DATASTORE = "_datastore"
@InstallIn(SingletonComponent::class)
@Module
object ProvideAnalyticsModule {
@Singleton
@Provides
fun provideDataStorePreference(
@ApplicationContext context: Context,
): DataStore<Preferences> {
val packageName = context.packageName
val dataStoreName = "$packageName$DEFAULT_DATASTORE"
return PreferenceDataStoreFactory.create(
produceFile = { context.preferencesDataStoreFile(dataStoreName) }
)
}
}
// in :presentation module
@HiltViewModel
class DashboardViewModel @Inject constructor(
private val analyticsUseCase: AnalyticsUseCase,
private val dataStore: DataStore<Preferences>,
)
has no dependency to:presentation
in:data
presentation/build.gradle
oday
03/21/2022, 11:22 AMkagomez
03/29/2022, 3:05 PMR Brian Amesbury
03/31/2022, 5:10 PMHilt
and I have a module setup like this:
@Module
@InstallIn(SingletonComponent::class)
abstract class DomainModule {
...
@Binds
@IntoMap
@IntKey(1)
@Reusable
internal abstract fun bindsFirstProvider(impl: FirstProvider) : Provider
@Binds
@IntoMap
@IntKey(2)
@Reusable
internal abstract fun bindsSecondProvider(impl: SecondProvider) : Provider
}
I am trying to inject the map into a class like this:
@Reusable
@OptIn(ExperimentalCoroutinesApi::class)
internal class ProviderService @Inject constructor(
private val providerMap: Map<Int, Provider>,
)
I am getting this compile time error:
error: [Dagger/MissingBinding] java.util.Map<java.lang.Integer,? extends com.example.Provider> cannot be provided without an @Provides-annotated method.
What am I missing to get this to work?Lauren Yew
05/05/2022, 6:24 PMapp:hiltJavaCompileDebugUnitTest
step when adding @HiltAndroidApp
to an Application?
We migrated from Dagger to using Hilt, and suddenly even an example basic empty unit test is failing trying to build the HiltAndroidApp but it's confusing b/c the unit tests shouldn't need Hilt and we're not testing a class that is using Hilt. Thanks!
Error:
error: cannot find symbol return DaggerApplication_HiltComponents_SingletonC.builder()
^
symbol: variable DaggerApplication_HiltComponents_SingletonC
Iman Sadrian
05/07/2022, 10:26 AM@HiltViewModel
open class BottomSheetViewModel @Inject constructor(
val savedStateHandle: SavedStateHandle,
val someRepository: SomeRepository,
)
where SomeRepository is:
@Singleton
open class SomeRepository@Inject constructor(
@ApplicationContext private val context:Context,
private val appLogManager: AppLogManager
)
so as you see one of the constructor parameters is savedStateHandle and because of that I can not inject that in test like this:
@Inject
lateinit var bottomSheetViewModel: BottomSheetViewModel
so as far as I see, seems the best practice for this is mocking, so I am trying to mock the viewModel like this:
@BindValue
val bottomSheetViewModel = mock<BottomSheetViewModel>()
Am I right so far?
but the problem is I get some errors when I create a mock from the viewModel
org.mockito.exceptions.base.MockitoException:
Mockito cannot mock this class: class com.zabanshenas.tools.base.BaseViewModel.
Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.
ritesh
05/09/2022, 8:34 AM@MyQualifier
@Singleton
class MyClass @Inject constructor() {}
or
@Binds
@MyQualifier
abstract fun binds(it: Impl): Interface
K Merle
05/17/2022, 3:06 PMARCHIT JAIN
06/19/2022, 1:45 PMTask apphiltAggregateDepsDebug FAILEDExecution failed for task 'apphiltAggregateDepsDebug'.
A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction> couldn't make a guess for com.archit.hoteldetails.Presentation.auth.AuthViewModel_HiltModules.BindsModule * Try:
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.* Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task 'apphiltAggregateDepsDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61) Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:342) at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:142) at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:94) at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForAll(DefaultAsyncWorkTracker.java:80) at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForCompletion(DefaultAsyncWorkTracker.java:68) at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:247) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68) at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224) at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207) at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
Constantin Cezar Begu
06/21/2022, 4:26 PMAkram Bensalem
06/29/2022, 10:22 PMandrew
07/17/2022, 5:49 AM@Module
@InstallIn(SingletonComponent::class)
interface AccountsModule {
@Binds
@Singleton
fun bindsAccountService(accountsService: AccountsServiceImpl): AccountsService
}
Qualifiers obviously wouldn’t work here, since Binds looks for a specific implementation to return. Provides wouldn’t work, since it has no context of the actual implementation either. Is there any way around it?
For context:
:app:mobile -- implements --> :app:core
:app:wear -- implements --> :app:core
Where :app:core
would contain the interface and :app:target
would contain the impl. Authentication would be similar but mobile supports a full oauth flow into AccountManager
but wear supports a device based flow, or syncing tokens from the phone into AccountManager
, AccountService
would be the mediator. I’m thinking of ways to re-architecture this, but wondering if this is possibleShobana Velmurugan
08/02/2022, 5:57 AMShobana Velmurugan
08/02/2022, 5:57 AMVivekpanchal64
08/02/2022, 1:00 PMYasser AKBBACH
08/25/2022, 8:25 AMkoin
to hilt
, I'm stuck in the area where koin
passes parameters to the inject!
e.g:
val SomeClass by inject {
parameterOf()
}
What's the equivalent in hilt
Chris Fillmore
08/25/2022, 6:43 PMActivityScoped
and ActivityRetainedScoped
when using Activity#recreate()
?
Activity docs say about recreate:
This results in essentially the same flow as when the Activity is created due to a configuration changeWhich leads me to suspect that
ActivityScoped
deps will be recreated, and ActivityRetainedScoped
deps will not.Yasser AKBBACH
08/29/2022, 2:51 PMscope
, no context
using dagger hilt
I found the EntryPointAccessors.fromApplication()
but it requires an applicationContext
Jitendra
09/15/2022, 4:48 AMVivekpanchal64
09/15/2022, 1:17 PMHilt ClassCastException: ViewComponentManager$FragmentContextWrapper cannot be cast to AppCompatActivity
can anyone help ?Carl Benson
09/30/2022, 2:43 PMimport com.squareup.anvil.compiler.internal.asClassName
or anything in the anvil.compiler.internal
package. I have api("com.squareup.anvil:compiler-api:2.4.2")
in my dependencies, is there something else I'm missing?Mobile Dev.
10/03/2022, 11:20 AMmattinger
10/20/2022, 11:04 PMinterface SomeType
class Type1: SomeType
class MyFactory
@Module
@ContributesTo(MyLibraryScope::class)
class SomeTypeModule {
@Provides
@IntoMap
@ClassKey(Type1::class)
fun type1Factory(): () -> SomeType = { Type1() }
@Provides
fun x(
factories: Map<Class<*>, () -> SomeType>
): MyFactory = MyFactory()
}
error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<?>,? extends kotlin.jvm.functions.Function0<? extends com.xfinity.dh.feature.library.di.SomeType>> cannot be provided without an @Provides-annotated method.