AspectJ Проблемы компилятора с передачей kotlin в иерархии типов

УВЕДОМЛЕНИЕ

TLDR; Я обнаружил, что это просто экологическая проблема. JAR с кодом kotlin имел старые файлы классов, которые вызвали непредвиденные проблемы, которые были корректно обработаны компилятором.

Я думаю, что в JAR был еще один файл класса, который я пытался зависеть от того, что назывался SimpleLink который был классом вместо интерфейса. Плагин компиляции Gradle Kotlin не удалял эти классы, когда я удалял файлы .kt . LPT: Запустите задачу очистки Gradle, прежде чем пытаться опубликовать ее, даже если вы публикуете только maven local.


У меня проблема с привязкой aspectj к коду, который использует классы kotlin из другого проекта.

Компилятор aspectJ работает с версией 1.8.6 .

Моя особая проблема заключается в том, что я продолжаю видеть это: Type mismatch: cannot convert from element type ExtendedSimpleLink to SimpleLink

У меня есть иерархия типов, где ExtendedSimpleLink extends LinkDecorator где LinkDecorator написан в kotlin и скомпилирован в другом проекте, а ExtendedSimpleLinkjava, скомпилированный с помощью компилятора aspectj.

LinkDecorator выглядит так:

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

Я понятия не имею, почему компилятор aspectj не может определить иерархию типов. Он должен смотреть на байт-код для LinkDecorator и говорить, что, очевидно, ExtendedSimpleLink является экземпляром SimpleLink .

В качестве примера приведен следующий код (пытающийся скомпилироваться компилятором 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); } } 

Компиляция указанного класса дает эту ошибку из 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 кажется совершенно прекрасным с этим кодом. Я думаю, что он использует компилятор JavaC для линтинга.

Мои вопросы, почему это происходит? Есть ли известная проблема в компиляторе AspectJ? Существуют ли аналогичные проблемы с interop с groovy и компилятором aspectJ, например?

Обновить

Я попытался добавить следующее, чтобы решить, разрешает ли он проблему:

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

Теперь у меня все те же исключения, что и раньше, но с новым исключением, добавленным в микс:

 [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