Dagger2 не работает после обновления Gradle - PullRequest
0 голосов
/ 16 марта 2020

У меня есть проект Android с Dagger2 v2.25.4 и Kotlin v1.3.61.

AppComponent. java

@Singleton
@Component(modules = {
        AppModule.class,
        BeansModule.class,
        DaoModule.class
})
public interface AppComponent extends AutoGenComponent {

    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder context(Context applicationContext);

        @BindsInstance
        Builder application(Application application);

        AppComponent build();
    }

    void inject(MainApp app);

    Context provideContext();
}

MainApp.kt

class MainApp : Application() {
    @Inject lateinit var countManager: DataCountManager
    @Inject lateinit var jobDispatcher: dagger.Lazy<JobDispatcher>
    private var component: AppComponent? = null

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        instance = this
    }

    override fun onCreate() {
        super.onCreate()
        //Method ordering is matters here. Call initRealm before initDi
        initRealm()
        initDi()
        initRx()
        ...
    }

    private fun initRx() {
        //https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
        //I don't want to crash the app every time i've got an exception
        RxJavaPlugins.setErrorHandler { it.pst() }

        //https://medium.com/@sweers/rxandroids-new-async-api-4ab5b3ad3e93
        RxAndroidPlugins.setInitMainThreadSchedulerHandler {
            AndroidSchedulers.from(Looper.getMainLooper(), true)
        }
    }

    private fun initDi() {
        component = DaggerAppComponent
            .builder()
            .context(this)
            .application(this)
            .build()

        component!!.inject(this)
    }



//    override fun activityInjector(): DispatchingAndroidInjector<Activity> =
//        activityDispatchingAndroidInjector

    companion object {
        var instance: MainApp? = null

        fun getComponent() = instance!!.component
    }
}

Gradle

classpath 'com.gradle:build-scan-plugin:1.16'
classpath 'com.android.tools.build:gradle:3.3.2'

AutoGenComponent поставляется из AnnotatedGroup. java

public class AnnotatedGroup {
    private static final String CLASS_NAME = "AutoGenComponent";
    private final List<AnnotatedData> data;

    public AnnotatedGroup() {
        data = new ArrayList<>();
    }

    public void add(AnnotatedData item) {
        data.add(item);
    }

    public void generateCode(AvailableLanguage requiredLanguage,
                             ProcessingEnvironment env, Filer filer) throws IOException {
        switch (requiredLanguage) {
            case JAVA:
                new JavaFileGenerator(CLASS_NAME, data).generate(filer);
                break;
            case KOTLIN:
                String outputPath = env.getOptions().get("kapt.kotlin.generated").replace("kaptKotlin", "kapt");
                new KotlinFileGenerator(outputPath, CLASS_NAME, data).generate(filer);
                break;
        }
    }

    public void clear() {
        data.clear();
    }
}

Но когда я обновляю его так:

classpath 'com.gradle:build-scan-plugin:2.4.2'
classpath 'com.android.tools.build:gradle:3.6.1'

сборка завершается неудачно из-за:

e: /.../dagger/component/AppComponent.java: error: cannot find symbol
public interface AppComponent extends AutoGenComponent {
                                      ^
  symbol: class AutoGenComponent

и

e: /.../dagger/component/AppComponent.java: error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public interface AppComponent extends AutoGenComponent {
       ^

Я пытался Очистить / Перестроить проект и / или Отменить кеширование / Перезапустить ... , но они функционируют, только если я верну Gradle. Я не знаю, требуется ли переход на AndroidX, но я делал это дважды, без каких-либо ожидаемых результатов.

Я обновлю вопрос, добавив build.gradle, если потребуется.

...