测试这个 AST 项目示例 ( net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip
) 的正确方法是:
- 解压那个包
- 在当前的 Eclipse 工作区中导入该包中的项目
- 右键单击项目并选择“Debug As > Eclipse Application”
(注意“调试为”,以便能够在您的第一个 Eclipse 实例中设置断点)
启动第二个 Eclipse 后,您可以:
- 转到Help/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
是在' i = 3
' 之后添加的,而不是替换它。
经过一些调试,结果ASTRewriteBasedManipulator:addNewVariableDeclaration()
忘记删除i=3
应该用声明“ ”替换的初始化程序“ int i = 3
”。
只需在此方法的末尾添加:
rewrite.remove(manager.getInitializer().getParent().getParent(), null);
你很高兴。