Kotlin中的“宁愿在该类上运行匕首处理器”


124

每当我对kotlin类进行注入时,我都会在构建中得到此注释(顺便说一句,我有一个既包含kotlin又包含Java的混合android项目)。

例如,执行以下gradle任务:(compileStagingDebugJavaWithJavacStagingDebug是我的构建变体),我收到以下消息:

“注意:为com.packageNameXXX.CourseDiscoveryMapFragment生成MemberInjector或Factory。最好在该类上运行匕首处理器。”

我的CourseDiscoveryMapFragment代码可以在这里看到:

class CourseDiscoveryMapFragment : Fragment(){

    @Inject
    lateinit var presenter: CourseDiscoveryMapPresenter

    lateinit var mapView: MapView

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.fragment_discovery_map, container, false)

        MapsInitializer.initialize(activity)

        mapView = view.mapView
        mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE))

        (activity as BaseActivity)
                .activityComponent.inject(this)
}

我的ActivityComponent是:

@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

    //Exposed to sub-graphs.
    Activity activity();
}

因此,我有用Java编写的Dagger组件和模块,而在Kotlin中有Dagger注入。

这是我应该担心的吗?

谢谢。


您可以发布整个错误/警告以及与此相关的代码吗?
marcospereira '16

4
这个问题需要更多细节。您基本上是将Google查询写成一个问题。
杰森·米纳德

@marcospereira重新编辑!谢谢!
法比奥

4
嘿,您是否找到解决方案,或者可能是发出警告的原因?
wojciech_maciejewski,2016年

Answers:


5

恐怕你做不到。为什么不用Kotlin写依赖模块呢?

要用Java编写依赖模块,您需要以这种方式配置Gradle脚本:

 compile 'com.google.dagger:dagger:2.8'
 apt 'com.google.dagger:dagger-compiler:2.8'

但是,要在Kotlin中编写依赖项模块,您应该以这种方式配置Gradle脚本:

compile 'com.google.dagger:dagger:2.8' 
kapt 'com.google.dagger:dagger-compiler:2.8'

匕首需要注释处理工具在编译过程中生成依赖代码。所以我想您只需要根据正确的语言使用正确的APT(注释处理工具)即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.