以编程方式将 Xtend class 设置为 Java class 的超级 class

Programmatically setting a Xtend class as super class of a Java class

我目前正在开发 Eclipse 插件。我想以编程方式将 Xtend class 设置为 Java class 的超级 class。 如果两个 classes 都是 Java classes 我会用 JDT API 来做。问题是我无法通过 Java AST 或 Java 模型访问 Xtend classes。

这是我试图访问 Xtend classes:

有没有办法将 Xtend class 设置为超级 class? 有没有办法在不引用 ITypeTypeDeclaration 的情况下使用字符串(包 + class 名称)设置 superclass?

编辑: Java class 和 Xtend class 都已经存在。

如果您已经知道超级 class 的限定名称,则不需要通过 AST 或 Java 模型访问它,只需名称就足够了。

当您谈到设置 Java class 的超级 class 时,不清楚 class (a) 是从头开始创建还是 ( b) 存在并正在修改。仍然可以使用 public AST 执行这两种情况(在 (a) 的情况下,只需创建 AST 并使用 ASTFlattener 对其进行序列化;在 (b) 的情况下你应该使用 ASTRewrite).

无论哪种方式,您要使用的 API 是 TypeDeclaration.setSuperclassType(Type),其中参数可能是由 QualifiedName:

构造的 SimpleType
void setSuperClass(TypeDeclaration typeDecl, String qualifiedName) {
    AST ast = typeDecl.getAST();
    Name name = ast.newName(qualifiedName);
    Type type = ast.newSimpleType(name);
    typeDecl.setSuperclassType(type);
}