AspectJ类型层次结构中的kotlin委托编译器问题

注意

TLDR; 我发现这只是一个环境问题。 带有kotlin代码的JAR具有旧的类文件,导致编译器100%正确处理的意外问题。

我认为JAR中还有另外一个类文件,我试图依赖这个叫做SimpleLink的类,而不是一个接口。 当我删除.kt文件时,Gradle Kotlin编译插件没有删除这些类。 LPT:在尝试发布之前运行Gradle clean任务,即使您只发布到maven本地。


我有一个与使用另一个项目的kotlin类的代码连接的aspectj问题。

aspectJ编译器运行1.8.6版本。

我特别的问题是,我一直看到这样的: Type mismatch: cannot convert from element type ExtendedSimpleLink to SimpleLink

我有一个类型层次结构,其中ExtendedSimpleLink extends LinkDecorator ,其中ExtendedSimpleLink extends LinkDecoratorLinkDecorator中编写并在另一个项目中编译, ExtendedSimpleLink是使用aspectj编译器编译的java。

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编译器进行linting。

我的问题是,为什么会发生这种情况? 在AspectJ编译器中是否有已知的问题? 与groovy和aspectJ编译器interop有类似的问题,例如?

更新

我已经尝试添加以下内容来查看是否可以解决问题:

 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