【问题标题】:Programmatically setting a Xtend class as super class of a Java class以编程方式将 Xtend 类设置为 Java 类的超类
【发布时间】:2017-02-15 16:09:25
【问题描述】:

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

这是我尝试访问 Xtend 类的内容:

  • 使用ASTParser
  • 使用IJavaProject.findType()

有没有办法将 Xtend 类设置为超类? 有没有办法用字符串(包+类名)设置超类,而不引用ITypeTypeDeclaration

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

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-jdt xtend


    【解决方案1】:

    如果您已经知道超类的限定名称,则不需要通过 AST 或 Java 模型访问它,只需名称即可。

    当您谈到设置 Java 类的超类时,不清楚该类 (a) 是从头开始创建的,还是 (b) 存在并且正在被修改。仍然可以使用公共 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);
    }
    

    【讨论】:

    • 感谢您的回答!这正是我一直在寻找的。这些类已经存在。我以前从未使用过ASTRewrite,你能告诉我它是如何工作的吗?
    • 鉴于我们已经讨论过教程幻灯片“如何训练 JDT 龙”,请跳至幻灯片 #46 进行介绍。此外,通过浏览 JDT/UI 的实现可以学到很多东西,其中所有的快速修复/辅助和重构都是使用 ast 重写实现的。
    • 感谢您迄今为止的帮助!我用你所有的技巧和其他例子都试过了,但我很难让这些变化在 Java 类中可见。我在这里写了一个问题,因为我没有想法:stackoverflow.com/questions/42279095/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多