2017-02-12 12 views
0

現在、Eclipseプラグインを開発中です。 XtendクラスをJavaクラスのスーパークラスとしてプログラムで設定したいと思います。 両方のクラスがJavaクラスの場合は、JDT APIを使用して行います。問題は、Java ASTまたはJavaモデルを介してXtendクラスにアクセスできないことです。XtendクラスをJavaクラスのスーパークラスとしてプログラムで設定する

これは私がXTENDクラスにアクセスしようとしたものです:IJavaProject.findType()

を使用してASTParser

  • を使用して

    • は、スーパークラスとしてXTENDクラスを設定する方法はありますか? ITypeまたはTypeDeclarationへの参照なしで、文字列(パッケージ+クラス名)を持つスーパークラスを設定する方法はありますか?

      EDIT: JavaクラスとXtendクラスはすでに存在します。

  • 答えて

    1

    スーパークラスの修飾名が分かっている場合は、ASTまたはJavaモデルを使用してアクセスする必要はありません。名前だけで十分です。

    Javaクラスのスーパークラスを設定する場合、そのクラス(a)が最初から作成されているか、(b)存在し、変更中であるかは不明です。どちらのシナリオも、公開されたAST を使用して実行することができます((a)ASTを作成して、ASTFlattenerなどを使用してシリアル化する場合、(b)の場合はASTRewriteを使用する必要があります。

    いずれかの方法で、使用したいAPIは引数はおそらくQualifiedNameから構築SimpleTypeであり、TypeDeclaration.setSuperclassType(Type)です:あなたの答えのための

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

    ありがとう!これはまさに私が探していたものです。クラスはすでに存在します。私は決して前に 'ASTRewrite'を使ったことはありません。どのように動作するのか教えてください。 – ConveniencePatterns

    +1

    チュートリアルのスライド「JDTドラゴンを鍛える方法」について既に説明しましたが、イントロのためにスライド#46にスキップするだけです。さらに、JDT/UIの実装をブラウズすることで多くのことを学ぶことができます.JDT/UIでは、すべてのクイックフィックス/アシストとリファクタリングがast書き換えを使用して実装されています。 –

    +0

    これまでのご協力ありがとうございます!私はあなたのヒントや他の例をすべて試してみましたが、Javaクラスで変更を可視化するのには苦労しています。私はアイデアがなくなったので、私はここに質問を書いた:http://stackoverflow.com/questions/42279095/eclipse-ast-not-changing-class-files-when-changing-typedeclaration – ConveniencePatterns