Kotlin注释处理忽略具有相似名称的项目

max*_*ron 9 android annotations kotlin dagger butterknife

我最近将我的大部分项目转换为kotlin.现在我遇到了一些似乎与注释库有关的异常错误.毋庸置疑,它并没有发生在Java中.

我将描述这些案例 - 一个在Dagger,一个在Butterknife.

1.当具有@Provides相同名称的不同模型中的2 种方法时.例如,在具有"provideFooOrBar"方法的文件"FooProvider.kt"中

@Module
class FooProvider(private val view: FooActivity) {
    ... 
    @Provides @FooScope fun provideView() = view
    @Provides @FooScope fun provideFooOrBar() = Foo()
}
Run Code Online (Sandbox Code Playgroud)

并使用相同的方法名称另一个文件"BarProvider.kt"

@Module
class BarProvider(private val view: BarActivity) {
    ...
    @Provides @BarScope fun provideView() = view
    @Provides @BarScope fun provideFooOrBar() = Bar()
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Dagger无法生成一些工厂库,我得到以下编译错误: Error:(27, 32) error: cannot find symbol class FooProvider_ProvideFooOrBarFactory

可以在https://github.com/maxandron/DaggerIssue325找到重现该问题的示例项目

2.使用Butterknife时这是一个问题.@Bind在两个不同的类中有两个带注释的变量时 - 其中一个只是在运行时无法初始化而没有任何编译错误!

例如,如果我有:

class FooActivity {
    @Bind(R.id.foo) lateinit var mFoo: View
}
class NotFooActivity {
    @Bind(R.id.not_foo) lateinit var mFoo: View
}
Run Code Online (Sandbox Code Playgroud)

然后其中一个(或两个?)将无法初始化而没有任何错误.导致kotlin.UninitializedPropertyAccessException: lateinit property mFoo has not been initialized异常时,现场被访问时抛出.


这是我在配置Kotlin时做错了还是kotlin bug?

先感谢您!罗恩

max*_*ron 1

事实证明这是 kapt 的一个错误。我在 Kotlin 的错误跟踪器上发布了一个问题,该问题现已标记为已修复。

该解决方案已合并

应该在 Kotlin 版本 1.0.2 中解决