如何在Resources [1]下运行插件项目:http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation%5FAST/index.html
如果我没错,项目的起点就在这里 公共类ASTArticleActionDelegate实现IObjectActionDelegate - > public void 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 - 树结构?)?但我认为上下文菜单没有区别!
让我知道一个方法示例,看看这个项目是否正在运行,以便我能够使用它。
答案 0 :(得分:1)
测试此AST项目示例(net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip
)的正确方法是:
(注意“Debug As”,以便能够在第一个eclipse实例中设置断点)
第二次日食启动后,您可以:
net.sourceforge.earticleast.app
”< / LI>
net.sourceforge.earticleast.app
项目!)Ast article: Move Declaration
”(检测相互矛盾的变量声明并将其移动到正确位置的操作)所以现在几乎所有东西都准备好测试那些AST操作。
最后一件事:创建一个能够突出显示那些变量声明重写的Java Unit编译。
在导入的项目(无论是什么)中创建包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);
}
}
从日食的第一个实例中,您可以在:
中设置一些断点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);
你很高兴。