Android 从1.0.2-1.0.3升级Kotlin:java.lang.NoSuchMethodError:未提供虚拟方法InjectedData$app_compiledBugKotlin()
我有一个Kotlin Espresso Dagger2小项目。使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,运行Espresso instrumental test(在MainActivityTest上)时,会出现上述错误 我的Dagger2测试模块如下Android 从1.0.2-1.0.3升级Kotlin:java.lang.NoSuchMethodError:未提供虚拟方法InjectedData$app_compiledBugKotlin(),android,kotlin,android-espresso,dagger-2,Android,Kotlin,Android Espresso,Dagger 2,我有一个Kotlin Espresso Dagger2小项目。使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,运行Espresso instrumental test(在MainActivityTest上)时,会出现上述错误 我的Dagger2测试模块如下 @Module open class ApplicationTestModule(protected val mApplication: Application) { @Provides inter
@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)
}
}
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);
}
}
dagger2为InjectedData生成的ApplicationTestModule如下所示
@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)
}
}
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);
}
}
package com.elyeproj.kotlinespressomock;
进口匕首。国内。工厂;
导入dagger.internal.preditions;
导入javax.annotation.Generated;
@产生(
value=“dagger.internal.codegen.ComponentProcessor”,
评论=”https://google.github.io/dagger"
)
公共最终类应用程序测试模块\u提供输入数据$app\u编译的Bugkotlinfactory
机具厂{
私有最终应用测试模块;
公共应用程序测试模块\u提供输入数据$app\u编译的BugKotInfactory(
ApplicationTestModule(模块){
断言模块!=null;
this.module=模块;
}
@凌驾
公共注入数据get(){
返回前提条件。checkNotNull(
module.provideInjectedData$app_compiledBugkotlin(),
“无法从非@Nullable@Provides方法返回null”);
}
公共静态工厂创建(ApplicationTestModule模块){
返回新的ApplicationTestModule\u providedInjectedData$app\u compiledBugkotlinfactory(模块);
}
}
其中,AndroidStudio无法解析提供的导入数据$app\u compiledBugKotlin()
。测试运行失败
我重申,当使用Kotlin 1.0.2(1.0.1-2)时,上述函数也存在,但AndroidStudio无法解析。但测试仍在运行
这是科特林问题还是匕首问题?我如何解决这个问题
要复制此问题,可以在中找到代码。只需将
ext.KOTLIN_VERSION='1.0.1-2'
更改为ext.KOTLIN_VERSION='1.0.3'
,然后在AndroidTest中运行MainActivityTest
。我自己也遇到过此类问题,我认为这与方法的内部可见性有关。如果你将它们公开,问题可能会得到解决。但我也很想知道根本原因是什么。谢谢@Androidx!这就解决了问题。是的,希望Dagger的人能提供这种见解。我自己也遇到过这种问题,我认为这与你的方法的内部可见性有关。如果你将它们公开,问题可能会得到解决。但我也很想知道根本原因是什么。谢谢@Androidx!这就解决了问题。是的,希望Dagger的人能提供这方面的见解。