I'm trying to @Inject
a class Outer
that has a nested data
class Inner
. The dagger generated Component
code refers to the nested class as Outer$Inner
when Inner
is used as a generic type.
I'm wondering if there's an annotation (or some other way) that I can use to generate the desired format (i.e. Outer.Inner
).
Code for reference:
// injected class
class Outer @Inject constructor(
private val repository: Repository
) : BaseOuter<Outer.Inner, Output> {
override fun invoke(input: Inner): Observable<Output> {
return repository.getOutput(input.id)
}
data class Inner(
val id: String
)
companion object {
const val NAMED = "OUTER"
}
}
// dagger module
@Named(Outer.NAMED)
@Provides
fun provideOuter(
factory: WrapperFactory<Outer.Inner, Output>,
outer: Outer
): WrappedOuter<Outer.Inner, Output> {
return factory.wrap(outer)
}
// target class where Outer is injected
class TargetClass @Inject constructor(
@Named(Outer.NAMED) val outer: WrappedOuter<Outer.Inner, Output>
)
// generated code in DaggerMainComponent
...
import some.package.name.Outer$Inner;
// error: cannot find symbol
// import some.package.name.Outer$Inner; // should be when Outer.Inner
// ^
// symbol: class Outer$Inner
// location: package some.package.name
...
Dagger: v2.26 with Kotlin v1.3.61
This question is also tracked here.