运行Eclipse插件

时间:2009-09-05 11:46:00

标签: java eclipse plugins eclipse-jdt

如何在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 - 树结构?)?但我认为上下文菜单没有区别!

让我知道一个方法示例,看看这个项目是否正在运行,以便我能够使用它。

1 个答案:

答案 0 :(得分:1)

测试此AST项目示例(net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip)的正确方法是:

  • 解压缩该包
  • 在当前的eclipse工作区中导入该包中的项目
  • 右键单击该项目,然后选择“Debug As> Eclipse Application”

(注意“Debug As”,以便能够在第一个eclipse实例中设置断点)

第二次日食启动后,您可以:

  • 转到Help / Anout Eclipse SDK,单击“安装详细信息”,单击“插件”,然后在顶部看到插件“抽象语法树文章,示例应用程序插件”,id“net.sourceforge.earticleast.app”< / LI>
  • 导入第二个eclipse实例的新工作区中的任何项目(例如,您可以重新导入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);

你很高兴。