测试这个 AST 项目示例 (net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip) 的正确方法是:
- 解压那个包
- 在您当前的 Eclipse 工作区中导入该包中的项目
- 右键单击项目并选择“Debug As > Eclipse Application”
(注意“调试为”,以便能够在您的第一个 Eclipse 实例中设置断点)
第二次eclipse启动后,您可以:
- 进入Help/Anout Eclipse SDK,点击“installation details”,点击“Plugins”,在右上角看到插件“Abstract Syntax Tree Article, Example Application Plugin”,id“
net.sourceforge.earticleast.app”
- 在第二个 Eclipse 实例的新工作区中导入任何项目(例如,您可以重新导入
net.sourceforge.earticleast.app 项目!)
- 右键单击任何类并在上下文菜单中查看自定义条目:“
Ast article: Move Declaration”(检测矛盾的变量声明并将它们移动到正确位置的操作)
所以现在几乎所有东西都可以测试这些 AST 操作了。
最后一件事:创建一个 Java 单元编译能够突出显示那些变量声明重写。
在您导入的项目(无论它是什么)中创建一个包test,并带有类:
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);
}
}
从eclipse的第一个实例开始,可以设置一些断点:
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);
你可以走了。