-
Notifications
You must be signed in to change notification settings - Fork 14
Description
I was implementing inheritance hierarchy with my screens and faced an issue with @AutoComponent.
I have next hierarchy of components:
-- MainActivityComponent
---- DrawerKeyComponent
------ ListKeyComponent
I got manually defined MainActivityComponent. DrawerKeyComponent and ListKeyComponent was generated with auto-dagger:
@ScopeSingleton(MainActivityComponent::class)
@Component(
dependencies = arrayOf(AppComponent::class),
modules = arrayOf(MainActivityModule::class)
)
interface MainActivityComponent : AppComponent
@AutoComponent(
dependencies = arrayOf(MainActivityComponent::class),
superinterfaces = arrayOf(MainActivityComponent::class)
)
@ScopeSingleton(DrawerKey::class)
class DrawerKey
@AutoComponent(
dependencies = arrayOf(DrawerKeyComponent::class),
superinterfaces = arrayOf(DrawerKeyComponent::class),
modules = arrayOf(ListModule::class)
)
@ScopeSingleton(ListKey::class)
class ListKey
Auto-generated components:
@Generated("autodagger.compiler.AnnotationProcessor")
@Component(
dependencies = MainActivityComponent.class
)
@ScopeSingleton(DrawerKey.class)
public interface DrawerKeyComponent extends MainActivityComponent
@Generated("autodagger.compiler.AnnotationProcessor")
@Component(
modules = ListModule.class
)
@ScopeSingleton(ListKey.class)
public interface ListKeyComponent
For some reason ListKeyComponent was generated without inheritance from DrawerKeyComponent. So I tried to define DrawerKeyComponent manually and use @AutoComponent only for ListKey. Here what I get in a result:
@Component(dependencies = arrayOf(MainActivityComponent::class))
@ScopeSingleton(DrawerKey::class)
interface DrawerKeyComponent : MainActivityComponent
@Generated("autodagger.compiler.AnnotationProcessor")
@Component(
dependencies = DrawerKeyComponent.class,
modules = ListKeyModule.class
)
@ScopeSingleton(ListKey.class)
public interface ListKeyComponent extends DrawerKeyComponent
In this case inheritance was set properly.
I was also testing example-kotlin project and it seems that auto-dagger can't setup inheritance from auto-generated components at all. To reproduce this issue you can set in example-kotlin next declaration for Container1:
@AutoComponent(
dependencies = arrayOf(KotlinMainActivityComponent::class),
superinterfaces = arrayOf(KotlinMainActivityComponent::class)
)
@ScopeSingleton(Container1::class)
class Container1 {}
Generated component will look like this:
@Generated("autodagger.compiler.AnnotationProcessor")
@Component
@ScopeSingleton(Container1.class)
public interface Container1Component {
}
In this case Container1Component is not extended from KotlinMainActivityComponent as expected.
Would be appreciated for any help.