Кинжал: не удалось найти символьную ошибку в сгенерированном коде компонента для вложенного класса Kotlin - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь @Inject класс Outer, который имеет вложенный data класс Inner. Сгенерированный в кинжале код Component ссылается на вложенный класс как Outer$Inner, когда Inner используется как обобщенный тип c.

Мне интересно, есть ли аннотация (или какой-либо другой способ) что я могу использовать для генерации желаемого формата (например, Outer.Inner).

Код для справки:

// 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
...

Кинжал: v2.26 с Kotlin v1.3.61

1 Ответ

0 голосов
/ 19 марта 2020
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    apply plugin: 'kotlin-kapt'

    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"

        defaultConfig {
            applicationId "dev.curlybraces.flowpro"
            minSdkVersion 21
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"

            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

        dataBinding {
            enabled = true
        }



    }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])

        //ui
        implementation project(':ui-feature-flow-list')
        implementation project(':ui-feature-newflow-title')
        implementation project(':ui-feature-newflow-step')
        implementation project(':ui-feature-flow-selectnode')
        implementation project(':ui-feature-flow-selectstep')
        implementation project(':ui-feature-flow-step-list')
        implementation project(':ui-feature-flow-step-details')

        //ui lib
        implementation project(":ui-lib-base")
        implementation project(":ui-lib-di")
        implementation project(":ui-lib-databinding-adapters")

        //analytics
        implementation project(":core-lib-analytics")
        implementation project(":core-lib-analytics-impl")

        //plugin
        implementation project(":core-lib-plugin")
        implementation project(":core-lib-plugin-impl")

        //core
        implementation project(":core-lib-usecase")
        implementation project(":core-lib-usecase-common")

        //app
        implementation project(":app-di")

        //domain
        implementation project(':domain-feature-flow')
        implementation project(':domain-models-flow')

        //data
        implementation project(':data-feature-flow')

        // Navigation
        implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
        implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
        androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

        //dagger2
        implementation "com.google.dagger:dagger:$dagger_version"
        implementation "com.google.dagger:dagger-android:$dagger_version"
        kapt "com.google.dagger:dagger-android-processor:$dagger_version"
        kapt "com.google.dagger:dagger-compiler:$dagger_version"
        //dagger2 test
        testImplementation "com.google.dagger:dagger:$dagger_version"
        testImplementation "com.google.dagger:dagger-android:$dagger_version"
        kaptTest "com.google.dagger:dagger-android-processor:$dagger_version"
        kaptTest "com.google.dagger:dagger-compiler:$dagger_version"

        // Constraint Layout
        implementation "androidx.constraintlayout:constraintlayout:$constraint_layout_version"

        // firebase
        implementation 'com.google.firebase:firebase-analytics:17.2.2'

        // leak canary
        debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'

        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation "androidx.core:core-ktx:$androidx_core_ktx_version"
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }
...