测试此 AST 项目示例的正确方法(net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip http://earticleast.sourceforge.net/net.sourceforge.earticleast.app_1.0.0.zip) is to:
- 解压缩该包
- 在当前 Eclipse 工作区中导入该包中的项目
- 右键单击该项目并选择“调试为 > Eclipse 应用程序”
(注意“调试为”,以便能够在第一个 Eclipse 实例中设置断点)
第二个 Eclipse 启动后,您可以:
- 转到帮助/Anout Eclipse SDK,单击“安装详细信息”,单击“插件”,然后在顶部看到插件“抽象语法树文章,示例应用程序插件”,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
被添加after 'i = 3
' 而不是替换它。
经过一番调试后发现ASTRewriteBasedManipulator:addNewVariableDeclaration()
忘记删除初始化程序'i=3
' 应该用声明替换'int i = 3
'.
只需在该方法的末尾添加:
rewrite.remove(manager.getInitializer().getParent().getParent(), null);
现在就可以走了。