从1.0.2升级Kotlin - 1.0.3:java.lang.NoSuchMethodError:没有虚拟方法provideInjectedData $ app_compileDebugKotlin()

时间:2016-07-04 04:53:11

标签: android kotlin android-espresso dagger-2

我有一个Kotlin Espresso Dagger2小项目。当我使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,当运行Espresso仪器测试(在MainActivityTest上)时,它出错了。

我的Dagger2 TestModule如下

@Module
open class ApplicationTestModule(protected val mApplication: Application) {

    @Provides
    internal fun provideApplication(): Application {
        return mApplication
    }

    @Provides
    @Singleton
    internal fun provideInjectedData(): InjectedData {
        return mock(InjectedData::class.java)
    }
}

为InjectedData生成的dagger2 ApplicationTestModule如下所示

package com.elyeproj.kotlinespressomock;

import dagger.internal.Factory;
import dagger.internal.Preconditions;
import javax.annotation.Generated;

@Generated(
  value = "dagger.internal.codegen.ComponentProcessor",
  comments = "https://google.github.io/dagger"
)
public final class ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory
    implements Factory<InjectedData> {
  private final ApplicationTestModule module;

  public ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(
      ApplicationTestModule module) {
    assert module != null;
    this.module = module;
  }

  @Override
  public InjectedData get() {
    return Preconditions.checkNotNull(
        module.provideInjectedData$app_compileDebugKotlin(),
        "Cannot return null from a non-@Nullable @Provides method");
  }

  public static Factory<InjectedData> create(ApplicationTestModule module) {
    return new ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(module);
  }
}

AndroidStudio无法解析provideInjectedData$app_compileDebugKotlin()的位置。测试运行失败。

我重新验证当使用Kotlin 1.0.2(1.0.1-2)时,上述功能也存在也无法通过AndroidStudio解析。但测试仍在进行中。

这是Kotlin还是Dagger问题?我怎么能解决这个问题?

要复制问题,可以在https://github.com/elye/kotlinespressomock中找到代码。只需将ext.KOTLIN_VERSION = '1.0.1-2'更改为ext.KOTLIN_VERSION = '1.0.3',然后在AndroidTest中运行MainActivityTest

0 个答案:

没有答案