Closed eygraber closed 4 months ago
In the following case FooSingleton isn't picked up from the BaseFooComponent interface:
FooSingleton
BaseFooComponent
@Scope annotation class FooSingleton interface Foo @Inject class MyFoo : Foo @Inject class FooHolder( private val foo: Foo ) interface BaseFooComponent { @Provides @FooSingleton fun provideFoo(): Foo } @FooSingleton @Component abstract class FooComponent : BaseFooComponent { override fun provideFoo(): Foo = MyFoo() abstract val holder: FooHolder companion object }
The following is generated, without provideFoo being scoped:
provideFoo
public fun FooComponent.Companion.create(): FooComponent = InjectFooComponent() public class InjectFooComponent() : FooComponent(), ScopedComponent { override val _scoped: LazyMap = LazyMap() override val holder: FooHolder get() = FooHolder( foo = provideFoo() ) }
Adding @FooSingleton to provideFoo in FooComponent does cause it to get scoped:
@FooSingleton
FooComponent
public fun FooComponent.Companion.create(): FooComponent = InjectFooComponent() public class InjectFooComponent() : FooComponent(), ScopedComponent { override val _scoped: LazyMap = LazyMap() override val holder: FooHolder get() = FooHolder( foo = _scoped.get("com.example.Foo") { provideFoo() } ) }
In the following case
FooSingleton
isn't picked up from theBaseFooComponent
interface:The following is generated, without
provideFoo
being scoped:Adding
@FooSingleton
toprovideFoo
inFooComponent
does cause it to get scoped: