11

以前のプロジェクトで書いたいくつかのボイラープレート コードを生成する単純な注釈プロセッサを (単なる楽しみのために) 作成しました。Activityクラスのアノテーションを集めて実際に以下のようなモジュールを生成する

@Module
abstract class ActivityInjectorModule {
  @ContributesAndroidInjector
  abstract fun providesMain2Activity(): Main2Activity

  @ContributesAndroidInjector
  abstract fun providesMainActivity(): MainActivity
}

ただし、短剣で実行すると、短剣は注釈プロセッサによって生成されたクラスを見つけることができないようです。クラスが生成され、生成されたディレクトリに存在しますが、ソースコードで使用できますが、コンパイル時にダガーが次の例外を生成します。専門家の提案はありますか?

error: cannot find symbol
@dagger.Component(modules = {dagger.android.AndroidInjectionModule.class, com.mallaudin.daggietest.di.AppModule.class, ActivityInjectorModule.class})
                                                                                                                       ^
  symbol: class ActivityInjectorModule

これはアプリのメイン コンポーネントです。

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AppModule::class,
        ActivityInjectorModule::class
    ]
)
interface AppComponent : AndroidInjector<App> {


    @Component.Builder
    interface Builder {

        fun addContext(@BindsInstance ctx: Context): Builder

        fun build(): AppComponent
    }
}

ActivityInjectorModuleクラスは、アノテーション プロセッサによって生成され、生成されたディレクトリに存在します。

アプリケーションクラス

class App : DaggerApplication() {
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().addContext(this).build()
    }
}

生成されたクラスを自分で作成すると、すべてが完全に機能します。どういうわけか、コンパイル時に、注釈プロセッサによって生成されたときに短剣がクラスを見つけることができません。

ユーリー・クリコフの答えの後、

ユリの答え

生成されたファイルは同じパッケージに含まれていますが、完全修飾名で参照されていることもわかります。それでも短剣はエラーを報告します。

誰かが実験したい場合は、githubリポジトリへのリンクを次に示します

4

3 に答える 3