2017-02-12 4 views
0

Ich arbeite gerade an einem Eclipse-Plugin. Ich möchte programmgesteuert eine Xtend-Klasse als Super-Klasse einer Java-Klasse festlegen. Wenn beide Klassen Java-Klassen wären, würde ich das mit der JDT-API tun. Das Problem ist, dass ich nicht über Java AST oder das Java Model auf die Xtend Klassen zugreifen kann.Programmgesteuertes Festlegen einer Xtend-Klasse als Superklasse einer Java-Klasse

Dies ist, was ich versucht, die Xtend Klassen zuzugreifen:

  • eine ASTParser
  • mit mit IJavaProject.findType()

Gibt es eine Möglichkeit, eine Xtend-Klasse als Superklasse zu setzen? Gibt es eine Möglichkeit, eine Oberklasse mit einer Zeichenfolge (Paket + Klassenname) ohne den Verweis auf die IType oder TypeDeclaration festzulegen?

EDIT: Sowohl die Java-Klasse als auch die Xtend-Klasse existieren bereits.

Antwort

1

Wenn Sie den qualifizierten Namen der Superklasse bereits kennen, sollten Sie nicht über AST oder Java Model darauf zugreifen müssen, nur der Name ist genug.

Wenn Sie von der Festlegung einer Superklasse einer Java-Klasse sprechen, ist nicht klar, ob diese Klasse (a) von Grund auf neu erstellt wird oder (b) existiert und gerade geändert wird. Dennoch können beide Szenarien unter Verwendung der öffentlichen AST ausgeführt werden (im Falle von (a) einfach den AST erstellen und ihn zum Beispiel unter Verwendung einer ASTFlattener serialisieren; im Falle von (b) sollten Sie ASTRewrite) verwenden.

So oder so, die API Sie TypeDeclaration.setSuperclassType(Type) verwenden möchten ist, wo das Argument ist wahrscheinlich ein SimpleType aus einem QualifiedName konstruiert:

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

Vielen Dank für Ihre Antwort! Genau das habe ich gesucht. Die Klassen existieren bereits. Ich habe nie 'ASTRewrite' vorher benutzt, kannst du mir sagen, wie es funktioniert? – ConveniencePatterns

+1

Nachdem wir bereits über die Tutorial-Folien "Wie man den JDT-Drachen trainiert" gesprochen haben, gehen Sie einfach auf Folie 46 für ein Intro. Darüber hinaus kann viel aus dem Durchsuchen der Implementierung von JDT/UI gelernt werden, wo alle Schnellkorrekturen/Hilfsprogramme und Refactorings mittels ast rewriting implementiert werden. –

+0

Vielen Dank für Ihre Hilfe bis jetzt! Ich habe es mit all deinen Tipps und anderen Beispielen versucht, aber ich habe Mühe, die Änderungen in den Java-Klassen sichtbar zu machen. Ich habe hier eine Frage geschrieben, weil mir die Ideen ausgegangen sind: http://stackoverflow.com/questions/42279095/eclipse-ast-not-changing-class-files-when-wechselnde-typedeclaration – ConveniencePatterns

Verwandte Themen