2

ここのリソース[1]でプラグインプロジェクトを実行するにはどうすればよいですか:http ://www.eclipse.org/articles/article.php?file = Article-JavaCodeManipulation%5FAST / index.html

私が間違っていなければ、プロジェクトの開始点はここにありますpublicclassASTArticleActionDelegateはIObjectActionDelegateを実装します->publicvoid run(IAction action)

public void run(IAction action) {
    if (selection instanceof IStructuredSelection) {
        ICompilationUnit lwUnit = (ICompilationUnit) ((IStructuredSelection) selection).getFirstElement();
        createActionExecutable(action.getId()).run(lwUnit);
    }
}

Eclipseアプリケーションとして実行する必要があることはわかっていますが、何かを表示するには、その後どうすればよいですか?Eclipseアプリケーションが起動しただけで、ボタンなどは何も表示されません。

「IObjectActionDelegate」を検索しましたが、コンテキストメニューと関係があるようです。何かを右クリックすると、何かが表示されるはずです(IStructuredSelection-ツリー構造?)?しかし、コンテキストメニューに違いはありません。

このプロジェクトが実行されていることを確認する方法の例を教えてください。そうすれば、このプロジェクトを使用できるようになります。

4

1 に答える 1

1

この AST プロジェクトの例 ( net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip) をテストする適切な方法は、次のとおりです。

  • そのパッケージを解凍します
  • 現在のEclipseワークスペースのそのパッケージ内のプロジェクトをインポートします
  • プロジェクトを右クリックし、[Debug As] > [Eclipse Application] を選択します。

(最初のEclipseインスタンス内にブレークポイントを設定できるように、「Debug As」に注意してください)

2 回目の日食が開始されると、次のことが可能になります。

  • Help/Anout Eclipse SDK に移動し、[installation details] をクリックし、[Plugins] をクリックして、プラグインの上部にある [Abstract Syntax Tree Article, Example Application Plugin]、id " " を参照してくださいnet.sourceforge.earticleast.app
  • その 2 番目の Eclipse インスタンスの新しいワークスペースに任意のプロジェクトをインポートします (たとえば、プロジェクトを再インポートできますnet.sourceforge.earticleast.app!)
  • 任意のクラスを右クリックし、コンテキスト メニューにカスタム エントリを表示します: " Ast article: Move Declaration" (矛盾する変数宣言を検出し、それらを正しい場所に移動するアクション)

これで、これらの AST 操作をテストするためのほぼすべての準備が整いました。

最後に、これらの変数宣言の書き換えを強調表示できる Java Unit コンパイルを作成します。

インポートしたプロジェクト (それが何であれ) にtest、次のクラスで package を作成します。

package test;

public class Test {

    static {
        int i = 2;
        System.out.println("test");
        System.out.println(i);
    }

}

そのクラスを右クリックして " Ast article: Move Declaration" を選択すると、ソースが次のように即座に書き換えられます。

package test;

public class Test {

    static {
        System.out.println("test");
        int i = 2;
        System.out.println(i);
    }

}

日食の最初のインスタンスから、いくつかのブレークポイントを設定できます。

  • ASTArticleMoveVariableDeclaration:run()
  • AbstractManipulator:manipulate(final CompilationUnit unit, Collection<VariableBindingManager> managers)

魔法がどこで起こっているかを確認します。

「移動宣言」ケースのその他のケースは次のとおりです。

static {
    int i = 2;
    System.out.println("test");
    try
    {
        System.out.println(i);          
    }
    catch(Exception e)
    {
        System.out.println(i);          
    }
}

次のように書き換えられます。

static {
    System.out.println("test");
    int i = 2;
    try
    {
        System.out.println(i);          
    }
    catch(Exception e)
    {
        System.out.println(i);          
    }
}

最後に、次のようなより高度な動きがあります。

package test;

public class Test {

    static {
        int i = 2;
        i = 3;
        System.out.println(i);
    }

}

package test;

public class Test {

    static {
        i = 3;
        int i = 3;
        System.out.println(i);
    }

}

' int i = 2' は正しく削除されました。ただし、i = 3残っている ' ' に注意してください。これは、新しい宣言ノード 'が ' ' を置き換えるのではなく、' ' の後にint i = 3追加されるためです。i = 3

いくつかのデバッグの後、宣言 ' ' で置き換えられるはずASTRewriteBasedManipulator:addNewVariableDeclaration()のイニシャライザ ' ' を削除するのを忘れていることが判明しました。i=3int i = 3

このメソッドの最後に追加するだけです:

 rewrite.remove(manager.getInitializer().getParent().getParent(), null);

そして、あなたは行ってもいいです。

于 2009-09-05T22:11:59.550 に答える