AspectJ Problemas del comstackdor con la delegación de kotlin en la jerarquía de types

DARSE CUENTA

TLDR; Descubrí que esto era simplemente un problema ambiental. El JAR con el código de kotlin tenía files de class anterior que causaban problemas inesperados que el comstackdor manejaba al 100% correctamente.

Creo que había otro file de class en el JAR del que estaba tratando de depender que se llamaba SimpleLink que era una class en lugar de una interfaz. El complemento de compilation de Gradle Kotlin no eliminó estas classs cuando .kt files .kt . LPT: ejecute la tarea de limpieza de Gradle antes de intentar publicar, incluso si solo está publicando en maven local.


Tengo un problema con el enlace aspectj contra código que usa classs kotlin de otro proyecto.

El comstackdor aspectJ ejecuta la versión 1.8.6 .

Mi problema particular es que, sigo viendo esto: No Type mismatch: cannot convert from element type ExtendedSimpleLink to SimpleLink

Tengo una jerarquía de types donde ExtendedSimpleLink extends LinkDecorator donde LinkDecorator se escribe en kotlin y se comstack en otro proyecto y ExtendedSimpleLink se comstack en java con el comstackdor de aspectj.

LinkDecorator ve así:

 abstract class LinkDecorator( private val decorated : SimpleLink ) : SimpleLink by decorated { override fun hashCode(): Int = decorated.hashCode() override fun equals(other: Any?): Boolean = decorated == other } 

No tengo idea de por qué el comstackdor de aspectj no puede descifrar la jerarquía de types. Debería mirar el bytecode para LinkDecorator y decir que obviamente ExtendedSimpleLink es una instancia de SimpleLink .

Como ejemplo, el siguiente código (tratando de ser comstackdo por el comstackdor aspectJ):

 final class ExtendedSimpleLink extends LinkDecorator { private final Double something; private final Object somethingElse; private ExtendedSimpleLink( final SimpleLink decorated, final Object somethingElse, final Double something) { super(decorated); this.somethingElse = somethingElse; this.something = something; } public static ExtendedSimpleLink from(final SimpleLink decorated) { if (decorated instanceof ExtendedSimpleLink) { return (ExtendedSimpleLink) decorated; } return new ExtendedSimpleLink(decorated, null, null); } } 

La compilation de la class anterior proporciona este error de maven:

 [ERROR] /Users/[user]/work/tmp/[project]/Core/src/main/java/com/company/core/engine/fitting/ExtendedSimpleLink.java:50:0::0 The return type is incompatible with LinkDecorator.getFabricLinkMetricEnhancement() [ERROR] error at if (decorated instanceof ExtendedSimpleLink) [ERROR] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [ERROR] /Users/[user]/work/tmp/[project]/Core/src/main/java/com/company/core/engine/fitting/ExtendedSimpleLink.java:58:0::0 Incompatible conditional operand types SimpleLink and ExtendedSimpleLink [ERROR] error at return (ExtendedSimpleLink) decorated; [ERROR] ^^^^^^^^^^^^^^^^^ 

IntelliJ parece completamente bien con este código. Creo que está usando el comstackdor de JavaC para deshilachar sin embargo.

Mis preguntas son, ¿por qué está sucediendo esto? ¿Hay algún problema conocido en el comstackdor de AspectJ? ¿Hay problemas similares con interoperabilidad con groovy y el comstackdor aspectJ, por ejemplo?

Actualizar

He intentado agregar lo siguiente para ver si resuelve el problema:

 final class ExtendedSimpleLink extends LinkDecorator implements SimpleLink { // same as above... } 

Ahora tengo todas las mismas excepciones que antes pero con una nueva exception agregada a la mezcla:

 [ERROR] error at final class ExtendedSimpleLink extends LinkDecorator implements SimpleLink [ERROR] ^^^^^^^^^ [ERROR] /Users/[user]/work/tmp/[project]/Core/src/main/java/com/company/core/engine/fitting/ExtendedSimpleLink.java:23:0::0 The type SimpleLink cannot be a superinterface of ExtendedSimpleLink; a superinterface must be an interface