运行 Eclipse 插件
如何在此处的资源 [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 - 树结构?)?但我在上下文菜单中看不出有什么区别!
请让我知道一个查看该项目正在运行的方法的示例,以便我能够使用它。
How do I run the plugin project under Resources [1] here: http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation%5FAST/index.html
If I am not wrong, the project starting point is here
public class ASTArticleActionDelegate implements 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);
}
}
I know I should run it as an Eclipse Application, but what should I do after that to see something? I only see an Eclipse application started, and nothing else, no button or anything!
I search for "IObjectActionDelegate" and it seems like it has something to do with context menu, which is I should see something when I right click on something (IStructuredSelection - tree structure?)? But I see no difference in the context menu!
Just let me know an example of a way to see that this project is running, so that I would be able to use it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
测试此 AST 项目示例的正确方法 (
net.sourceforge .earticleast.app_1.0.0.zip_1.0.0.zip
) 的作用是:(注意“调试为”,以便能够在第一个 Eclipse 实例中设置断点)
启动第二个 Eclipse 后,您可以:
net.sourceforge.earticleast.app
”net.sourceforge.earticleast.app
项目!)Ast 文章:移动声明
”(检测矛盾的变量声明并将它们移动到正确位置的操作)所以现在几乎所有东西都已准备就绪,可以测试这些 AST 操作。
最后一件事:创建一个能够突出显示那些变量声明重写的 Java 单元编译。
在导入的项目(无论是什么)中创建一个包
test
,其中包含类:右键单击该类并选择“
Ast 文章:移动声明
”:请参阅源立即重写为:从 Eclipse 的第一个实例中,您可以在以下位置设置一些断点:
ASTArticleMoveVariableDeclaration:run()
AbstractManipulator:manipulate(final CompilationUnit unit, CollectionManagers )
看看神奇发生在哪里。
“移动声明”情况的其他情况是:
被重写为:
最后,有一个更高级的移动,即:
'
int i = 2
' 已被正确删除。但是,请注意剩下的“i = 3
”:这是因为新的声明节点“int i = 3
”是在之后添加的。i = 3
' 而不是替换它。经过一番调试后,结果发现
ASTRewriteBasedManipulator:addNewVariableDeclaration()
忘记删除初始化程序“i=3
”,它应该用声明“int”替换我= 3 '。
只需在此方法的末尾添加:
即可开始。
The proper way to test this AST project example (
net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip
) is to:(Note the "Debug As", to be able to set breakpoint within your first eclipse instance)
Once the second eclipse is launched, you can:
net.sourceforge.earticleast.app
"net.sourceforge.earticleast.app
project!)Ast article: Move Declaration
" (the action to detect contradicting variable declarations and to move them to their correct place)So now almost everything is in place to test those AST manipulation.
One last thing: create a Java Unit compilation able to highlights those variable declarations rewrites.
Create in your imported project (whatever it is) a package
test
, with the class:Right-click on that class and select "
Ast article: Move Declaration
": see the source being instantly rewritten as:From the first instance of the eclipse, you can set up some breakpoints in:
ASTArticleMoveVariableDeclaration:run()
AbstractManipulator:manipulate(final CompilationUnit unit, Collection<VariableBindingManager> managers)
to see where the magic is happening.
The other cases of "Move Declaration" cases are:
which get rewritten as:
Finally, there is a more advanced move which is:
'
int i = 2
' has been correctly removed. However, note the 'i = 3
' which is left: that is because the new declaration node 'int i = 3
is added after 'i = 3
' instead of replacing it.After some debugging, it turns out
ASTRewriteBasedManipulator:addNewVariableDeclaration()
forgets to remove the initializer 'i=3
' which it is supposed to replaced with the declaration 'int i = 3
'.Just add at the end of this method:
and you are good to go.