evant / kotlin-inject

Dependency injection lib for kotlin
Apache License 2.0
1.24k stars 55 forks source link

Conflicting declarations with multiple identical overrides #309

Closed damianw closed 10 months ago

damianw commented 1 year ago

Code such as the following:

class MyDep

interface Provisioner {

    @Provides
    fun provideMyDep() = MyDep()
}

interface Accessor1 {

    val myDep: MyDep
}

interface Accessor2 {

    val myDep: MyDep
}

@Component
interface MyComponent : Provisioner, Accessor1, Accessor2

Generates the following:

public fun KClass<MyComponent>.create(): MyComponent = InjectMyComponent()

public class InjectMyComponent : MyComponent {
  public override val myDep: MyDep
    get() = provideMyDep()

  public override val myDep: MyDep
    get() = provideMyDep()
}

The override should only be generated once, as this code cannot be compiled:

Conflicting declarations: public open val myDep: MyDep, public open val myDep: MyDep