Habitación Kotlin +: java.lang.IllegalArgumentException: void no se puede convertir en un elemento

Intento agregar Room en mi proyecto, que es Java + Kotlin, pero cuando bash comstackr el proyecto, falla en :app:kaptDebugKotlin con el siguiente error:

  e: java.lang.IllegalStateException: failed to analyze: java.lang.IllegalArgumentException: void cannot be converted to an Element at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules(KotlinToJVMBytecodeCompiler.kt:138) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:58) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:103) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92) at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:386) at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:889) at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137) at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:916) at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:888) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:385) at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346) at sun.rmi.transport.Transport$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalArgumentException: void cannot be converted to an Element at com.google.auto.common.MoreTypes$AsElementVisitor.defaultAction(MoreTypes.java:532) at com.google.auto.common.MoreTypes$AsElementVisitor.defaultAction(MoreTypes.java:527) at javax.lang.model.util.SimpleTypeVisitor6.visitNoType(SimpleTypeVisitor6.java:226) at com.sun.tools.javac.code.Type$JCVoidType.accept(Type.java:1736) at com.google.auto.common.MoreTypes.asElement(MoreTypes.java:524) at com.google.auto.common.MoreTypes.asTypeElement(MoreTypes.java:553) 

Estas son las versiones que estoy usando:

 kotlin_version = '1.1.51' room library version = '1.0.0' android build tool = '3.0.1' 

debajo de las cosas que he agregado en mi gradle para la Habitación:

 kapt "com.android.databinding:compiler:3.0.1" //Room implementation "android.arch.persistence.room:runtime:1.0.0" kapt "android.arch.persistence.room:compiler:1.0.0" implementation "android.arch.persistence.room:rxjava2:1.0.0" 

También agregué el apply plugin: 'kotlin-kapt' en mi build.gradle.

Así es como he implementado Room Library:

 RoomDatabase.kt @Database(entities = arrayOf(ProductTest::class), version = CartDatabase.DATABASE_VERSION) abstract class CartDatabase : RoomDatabase() { companion object { const val DATABASE_VERSION = 1 const val DATABASE_NAME = "sall_customer_db" } abstract var cartRepositoryImpl: CartRepositoryImpl } ProductTest.kt @Entity data class ProductTest( @PrimaryKey @ColumnInfo(name = "id") var productId: Int, @ColumnInfo(name = "name") var productName: String ) CartRepositoryImpl.kt @Dao interface CartRepositoryImpl : CartRepository { @Insert(onConflict = OnConflictStrategy.REPLACE) override fun addToCart(product: ProductTest): Long } 

Acabo de codificar esto sin usarlo en ningún lado e intenté comstackr, pero falla. Se comstack bien si hago un comentario sobre las cosas de la habitación de gradle & code pero falla solo con el código anterior.

Ya he intentado limpiar el proyecto, pero no ayudó. ¿Me estoy perdiendo de algo? Por favor, ayúdame aquí.

Editar . Creé el nuevo proyecto de demostración para verificar y también estoy enfrentando el mismo error de compilation allí. El código relacionado con la Habitación es el mismo que el anterior, aquí estoy agregando el build.gradle completo de mi demo:

Nivel de proyecto gradle:

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.51' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } // Versions ext { support_library_version = '27.0.0' play_services_version = '11.6.2' retrofit_version = '2.3.0' arch_components_version = '1.0.0' } task clean(type: Delete) { delete rootProject.buildDir } 

gradle del module de aplicaciones

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 defaultConfig { applicationId "com.abc.kotlinroomdemo" minSdkVersion 14 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' // RxJava2 implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxjava:2.1.5' //Room implementation "android.arch.persistence.room:runtime:$arch_components_version" implementation "android.arch.persistence.room:rxjava2:$arch_components_version" kapt "android.arch.persistence.room:compiler:$arch_components_version" //Dagger 2 //compile 'com.google.dagger:dagger-android:2.10' //kapt 'com.google.dagger:dagger-android-processor:2.10' //compileOnly 'com.google.dagger:dagger:2.10' //implementation 'com.google.dagger:dagger:2.13' //kapt 'com.google.dagger:dagger-compiler:2.13' //provided 'javax.annotation:jsr250-api:1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } 

Prueba esto

 annotationProcessor "android.arch.persistence.room:compiler:1.0.0" 

en lugar de

 kapt "android.arch.persistence.room:compiler:1.0.0" 

Maaan! ¡Qué error tan tonto! En la class abstracta RoomDatabase , necesitamos declarar la diversión abstracta devolviendo el object Dao pero había definido var abstracta allí.

Tan cambiante

 abstract var cartRepositoryImpl: CartRepositoryImpl 

a:

 abstract fun cartRepositoryImpl(): CartRepositoryImpl 

corrigió el error de compilation! Pasé por alto esto mientras seguía las cosas de un blog, lo admito, pero aún así, ¡el mejor error de time de compilation no hubiera sido malo!

  • MQTT Android en modo Doze (Android 7.0)
  • Kotlin: ¿Cuando la function de extensión oculta la implementación pnetworkingeterminada de la class?
  • ¿Cómo especificar la versión de Kotlin?
  • Jerarquía de nodo de la list de routes de directory
  • ¿Cómo convertir una list borrada por types a una matriz en Kotlin?
  • @Autowinetworking no funciona en el parámetro de método
  • ¿Se puede sobrepasar var con val con class henetworkingada en Kotlin?
  • Implementando la búsqueda que empuja los resultados a la list tan pronto como estén disponibles usando rxJava
  • Kotlin: el range For-loop debe tener un método 'iterator ()'
  • La function de extensión no crea un nuevo object Observable
  • No se puede ejecutar la aplicación JavaFX - Kotlin