java - 无法弄清楚 eclipse 插件如何确定重命名选择

标签 java eclipse-plugin

我在 Eclipse 论坛中发布了以下注释:https://www.eclipse.org/forums/index.php/t/1072029/ 。这包含了所有详细信息,但我将在这里重复它们。

我正在使用一个有点复杂的 Eclipse 插件代码库。它用于以特定语言编辑文件的目的。我对维护 Eclipse 插件还很陌生。原作者不容易找到。

代码库是开源的,位于 github 上 https://github.com/xored/yang-ide .

该插件所使用的语言与 XML 有一些相似之处(不是在语法上),因为一个模块可以通过名称“导入”另一个模块,并指定与该导入文件中的符号关联的前缀。该语言还有一个“use”命令,它采用表示某种结构化类型的符号名称。符号名称可以带或不带前缀。结构化类型可以在该模块或导入的模块中定义。

该插件有一个功能,我可以选择符号名称的定义,并在“重构”子菜单中选择“重命名”。它将选择文件中出现的所有该符号名称,并提示我重命名它,就像 Java 编辑器(和其他编辑器)的工作方式一样。

问题是,它选择替换的某些事件可能无效。如果我在该模块中选择的符号名称恰好与导入模块中的符号名称相同(由该模块中的前缀引用),则当我选择“重命名”操作时,它也会标记这些前缀出现的情况,即使它们引用不同的符号。

令我困惑的是,尽管我可以完全访问该插件的源代码,但我无法弄清楚它在哪里确定要选择哪些符号。我确实找到了RenameAction类,它扩展了 Action 并实现了 ISelectionChangedListener,但其中似乎没有任何内容具有此逻辑。我想它所做的事情一定有一些“固有的”东西,这样的逻辑已经在 SDK 中提供了,我只是不明白它是从哪里来的。

我能够设置一个远程调试系统,从主机上的 Eclipse 实例连接到在虚拟机中运行的 Eclipse 测试实例,因此我在单步执行事件驱动代码时不会遇到任何问题。

我可以使用任何想法来跟踪 Eclipse 插件中的此类问题。我想还有其他具有类似行为的插件。

最佳答案

该操作似乎只是收集一些信息(例如文件),然后调用 RenameLinkedMode做这项工作。

RenameSupport.findLocalReferences() 的调用似乎最有可能成为错误的根源。

关于调试的注意事项:您可以尝试向插件添加日志记录,以查看当调试过于复杂时它会做什么。

或者您可以尝试chronon它允许您记录程序执行并及时前进和后退,或者回答诸如“这个值从哪里来?”之类的问题

关于java - 无法弄清楚 eclipse 插件如何确定重命名选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721673/

相关文章:

java - JFrame 总是为 Action 监听器内的变量输出 null

java - 在项目树中查找资源

eclipse-plugin - 序列图中的 Action 执行规范用法

java - 数组长度自减

java - 用于比较两个 ListNode 值的比较器

Java正则表达式检查是否不以特定字符串开头但包含多个字符串

java - 如何在 R 脚本中运行可执行 .jar 文件?

eclipse - 在 eclipse project explorer 上下文菜单中添加 "Project"以上的项目

java - 为什么选择全局环境基金?我什么时候必须使用 GEF

java - 添加库为 "Referenced library"