以编程方式将 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:
- 使用
ASTParser
- 使用
IJavaProject.findType()
有没有办法将 Xtend class 设置为超级 class?
有没有办法在不引用 IType
或 TypeDeclaration
的情况下使用字符串(包 + 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);
}
我目前正在开发 Eclipse 插件。我想以编程方式将 Xtend class 设置为 Java class 的超级 class。 如果两个 classes 都是 Java classes 我会用 JDT API 来做。问题是我无法通过 Java AST 或 Java 模型访问 Xtend classes。
这是我试图访问 Xtend classes:
- 使用
ASTParser
- 使用
IJavaProject.findType()
有没有办法将 Xtend class 设置为超级 class?
有没有办法在不引用 IType
或 TypeDeclaration
的情况下使用字符串(包 + 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);
}