UnsupportedOperationException al crear un proyecto de Kotlin en Idea
Cuando bash build mi proyecto Kotlin, aparece el siguiente error en Idea:
Error:Kotlin: [Internal Error] org.jetbrains.kotlin.util.KotlinFrontEndException: Exception while analyzing expression at (60,19) in E:/altruix-is/src/main/kotlin/com/mycompany/myproduct/capsulecrm/CapsuleCrmSubsystem.kt: client.execute(req) [...] Caused by: java.lang.UnsupportedOperationException: doSubstitute with no original should not be called for synthetic extension at org.jetbrains.kotlin.synthetic.SamAdapterFunctionsScope$MyFunctionDescriptor.doSubstitute(SamAdapterFunctionsScope.kt:165) at org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl$CopyConfiguration.build(FunctionDescriptorImpl.java:553) at org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition.isOverridable(ErasedOverridabilityCondition.kt:47)
El error parece ocurrir en llamadas
- Cómo hacer PATCH correctamente en lenguajes fuertemente tipados basados en Spring - example
- Elementos seleccionados en el menu
- Asignación variable de nula Kotlin
- Kotlin + Dagger - Inyectar map para ViewModel fábrica
- Kotlin y Java en el mismo proyecto utilizando Eclipse IDE
res = client.execute(req)
donde el client
es Apache HttpClient.
El file fuente, donde esto ocurre, se puede encontrar aquí .
Envié el informe de error a JetBrains, pero tengo que trabajar más en el proyecto y, por lo tanto, trabajar mucho. Tenga en count que hasta ayer todo funcionó bien. Ayer actualicé el plugin de Kotlin a la versión más reciente, tal vez ese sea el problema.
¿Cómo puedo evitar el error anterior?
Actualización 1 (03.03.2017 14:46 MSK):
Esto no funciona:
open fun addNote(note: String, compId: Long): ValidationResult { val client = httpClient if (client == null) { return ValidationResult(false, "Internal error") } var res: CloseableHttpResponse? = null var req: HttpUriRequest? try { req = composeAddNoteRequest(note, compId) res = client.execute(req) if (res.statusLine.statusCode != 201) { logger.error("addNote(note='$note', compId=$compId): Wrong status code ${res.statusLine.statusCode}") return ValidationResult(false, "Wrong status code (CRM interaction)") } return ValidationResult(true, "") } catch (throwable: Throwable) { logger.error("addNote(note='$note', compId=$compId)", throwable) return ValidationResult(false, "Database error") } finally { close(res) } return ValidationResult(false, "Internal logic error") }
Esto funciona (la diferencia está en la segunda línea desde la parte superior):
open fun addNote(note: String, compId: Long): ValidationResult { val client = httpClient as CloseableHttpClient // Change if (client == null) { return ValidationResult(false, "Internal error") } var res: CloseableHttpResponse? = null var req: HttpUriRequest? try { req = composeAddNoteRequest(note, compId) res = client.execute(req) if (res.statusLine.statusCode != 201) { logger.error("addNote(note='$note', compId=$compId): Wrong status code ${res.statusLine.statusCode}") return ValidationResult(false, "Wrong status code (CRM interaction)") } return ValidationResult(true, "") } catch (throwable: Throwable) { logger.error("addNote(note='$note', compId=$compId)", throwable) return ValidationResult(false, "Database error") } finally { close(res) } return ValidationResult(false, "Internal logic error") }
- Constructor de class de datos con dos constructores diferentes en Kotlin
- Verificando si el resultado de un cálculo es un número integer
- Hacer ancho de dialog a pantalla completa
- ¿Por qué el comstackdor no encuentra la constante android.R.id.home?
- No se puede resolver el símbolo kotlinOptions (en la construcción de Gradle)
- Suprimir "Usar syntax de acceso a la propiedad" para el método o class
- Convierta maps en una list de maps en Kotlin
- Java -> Conversión de Kotlin con types crudos
En su ejemplo anterior, client.execute(req)
devuelve HttpResponse
, que no es un subtipo de CloseableHttpResponse
. Entonces, el error de error de tipo es correcto. O bien debería usar CloseableHttpClient
aquí, o client.execute(req)
a CloseableHttpResponse
.
No pude reproducir KotlinFrontEndException
de su ejemplo. Desde el seguimiento de stack proporcionado, puedo deducir que algo malo sucedió con los "adaptadores SAM", es decir, cuando usa un Kotlin lambda en una llamada al método Java que acepta una interfaz de método abstracto único (SAM). Por favor, presente un error aquí si el problema persiste: http://kotl.in/issue
- Encadenando funciones de retorno de promise en Kovenant
- Cómo escribir Short / Int en buffer de 1 byte