静态嵌套接口的 Xtend 编译问题

Xtend compilation issues with static nested interfaces

几个小时以来,我一直在尝试解决这个非常奇怪的错误,但我就是想不通。

我在 Eclipse 的一个项目中的 Xtend 源文件中有以下代码:

interface Apple {
    def void test() {}
    static interface Green extends Apple {
        override test() {
            Apple.super.test();
        }
    }
}

由于某种原因,我在上面的代码中遇到关键字 "super" 的编译器错误:

Java problem: No enclosing instance of the type Apple is accessible in scope

在检查 Xtend 生成的 Java 源代码后,我发现它正在创建非静态的嵌套接口,并且使用关键字 "this" 而不是 "super", 这显然会导致这个错误。

Xtend 输出(重新格式化):

public interface Apple {
    public default void test() {}
    public interface Green extends Apple {
        @Override
        public default void test() {
            Apple.this.test();
        }
    }
}

为什么 Xtend 编译器会这样做?

也许最奇怪的部分是编译器的输出不一致。当我重命名超级接口时,Xtend 生成的 Java 源代码在语义上发生了变化。

我正在使用 Xtend 2.9.0 的 Eclipse Xtend 插件,源目标为 Java 8.

编辑: 我应该注意,我知道上面的代码似乎在语义上毫无意义,并且鉴于该方法是继承的,显然是不必要的。然而,这是我实际的、更实用的代码的简化案例。

it is creating the nested interface as non-static

嵌套接口总是 static 因此您指定的显式 static 修饰符是多余的。 (所以 Xtend 编译器在这里是正确的。)

using the keyword "this" instead of "super"

我猜这是一个 Xtend 编译器错误,相应的 Java 源代码按预期编译和执行:

interface AppleJava {
    default void test() {
        System.out.println("AppleJava.test()");
    }

    interface GreenJava extends AppleJava {
        @Override
        default void test() {
            AppleJava.super.test();
            System.out.println("GreenJava.test()");
        }
    }
}

class Test1 {
    public static void main(String[] args) {
        new AppleJava() {}.test();
        new AppleJava.GreenJava() {}.test();
    }
}

结果:

AppleJava.test()
AppleJava.test()
GreenJava.test()