この 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=3
int i = 3
このメソッドの最後に追加するだけです:
rewrite.remove(manager.getInitializer().getParent().getParent(), null);
そして、あなたは行ってもいいです。