Search code examples
javaeclipseeclipse-plugineclipse-jdtxtend

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


I am currently working on an Eclipse plugin. I want to set programmatically a Xtend class as super class of a Java class. If both classes were Java classes I would do that with the JDT API. The problem is that I cannot access the Xtend classes through the Java AST or the Java Model.

This is what I tried to access the Xtend classes:

  • using an ASTParser
  • using IJavaProject.findType()

Is there a way to set a Xtend class as super class? Is there a way to set a superclass with a string (package + class name), without the reference to the IType or TypeDeclaration?

EDIT: Both the Java class and the Xtend class already exist.


Solution

  • If you already know the qualified name of the super class, you shouldn't need to access it via AST or Java Model, just the name is enough.

    When you speak of setting a super class of a Java class, it's not clear if that class (a) is being created from scratch or (b) exists and is being modified. Still both scenarios can be performed using the public AST (in case of (a) just create the AST and serialize it using, e.g., an ASTFlattener; in case of (b) you should use ASTRewrite).

    Either way, the API you want to use is TypeDeclaration.setSuperclassType(Type), where the argument is probably a SimpleType constructed from a QualifiedName:

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