当前位置: 首页 > 知识库问答 >
问题:

Dagger找不到其他注释处理器生成的类

燕凯旋
2023-03-14

我已经编写了一个简单的注释处理器(只是为了好玩),它将生成一些我在以前的项目中编写的样板代码。它实际上通过收集活动类上的注释来生成如下所示的模块

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

  @ContributesAndroidInjector
  abstract fun providesMainActivity(): MainActivity
}

但是,当我用dagger运行时,dagger似乎找不到我的注释处理器生成的类。虽然,类是生成的,并且存在于生成的目录中,我可以在源代码中使用它,但在编译时,dagger会产生以下异常。有什么专家建议吗?

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
    }
}
class App : DaggerApplication() {
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().addContext(this).build()
    }
}

如果有人想做实验,这里有github存储库的链接

共有1个答案

冯星剑
2023-03-14

解决方案:

  1. 生成java代码。Kapt不支持多轮。
  2. 尽可能早地写入生成的文件。

说明:

    null

再多说几句:

  • roundenvironment.processingover()==true时不要生成代码,它不会触发另一轮。在看到注释的同一轮中生成它。
  • 要使生成的代码对注释处理器可见,请使用filer编写代码。
 类似资料:
  • 我在使用gradlew(4.10.2)+dagger(2.18)时遇到了一个奇怪的问题。 问题是当我打电话的时候: /commonmodule_providesgsonFactory.java:6:错误:包javax.annotation.processing不存在导入javax.annotation.processing.generated; /commonmodule_providesgson

  • http://maven.apache.org/xsd/maven-4.0.0.xsd" 尊敬的各位:, 我需要一些帮助来实现我的项目中的mapstruct。我已经有一些注释处理器需要在pom中命名。maven的xml

  • 问题内容: 我想创建一个自定义注释(使用Java),该注释将接受其他注释作为参数,例如: 但这会导致编译器错误“注释成员的类型无效”。 Object []也无效。 有什么方法可以做我想要的吗? 问题答案: 我本人就此提出针对此问题的解决方法: 好吧,我想要实现的是这样的: 拟议的解决方法: 用以下方法定义一个无参数构造函数的类(稍后将由您自己的注释处理器调用): 用法:

  • 我正在尝试创建一个自定义注释,例如,确保字段或方法既是又是,如果字段或方法既不是又不是,则会生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 正如所暗示的,我不知道如何生成编译时错误。Processor的文档清楚地表明我不应该抛出异常, 如果处理器抛出未捕获的异常,该工具可能会停止其他活动注释处理器。 它接着描述了当提出错误条件时会发生什么,现在是如何提出错误条

  • 问题内容: 我正在尝试创建一个自定义批注,例如,以确保字段或方法为and ,并且如果该字段或​​方法不为and ,则将生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 如所示,我不知道如何生成编译时错误。Processor 的文档清楚地表明,我不应该抛出异常, 如果处理器抛出未捕获的异常,则该工具可能会停止其他活动的注释处理器。 它继续描述了引发错误条件时会发生