扩展Eclipse的Java开发工具 - 编程入门网
何时使用 AST 之间的差别,请考虑清单 10 中的代码。
清单 10. 模糊的变量引用
如果作为重构的一部分,您希望查找对实例变量 foo 的引用,那么就会明白一个单纯的解析会使区分本地引用和实例变量引用成为一个难题。AST 创建了完整的分析树,其中表示了 Java 源代码的每个元素并对这些元素进行了区分。在这个特例中,不同的类会考虑“foo”引用的上下文,将“foo”引用表示成 AST 的节点(如 FieldDeclaration 、 SimpleName 和 ThisExpression ),因此您会很轻松地识别它们。 正如前面提到的,本文将只讨论我们所选择的简单例子。现在,让我们回到我们前面跳过的用省略号表示的代码。这个代码将使用 IScanner 的实例以确定并替换源代码中确定成员可视性的关键字。我们将处理的可视性修饰符是 public 、 private 、 protected 和 final 。通过采用“蛮力”方法,我们可以简化这个解决方案,即,采用两个步骤就可以完成。首先删除方法特征符中所有的可视性修饰符(或至少扫描查找它们,如果找到,就删除),然后插入所希望的修饰符。特别地: 如果在方法特征符中找到 public 、 private 或 protected ,就删除它们。 插入所请求的可视性修饰符(对于包可视性的情况,不作任何操作,因为这是缺省操作;即没有任何修饰符)。 final 修饰符很简单。因为所希望的行为就是插入和除去这个修饰符,所以如果它存在,我们除去它;否则就插入它。清单 11 中的代码只显示了一个例子,它无条件地将成员的可视性从 pubilc 改成 private。在与本文相关的解决方案中,您将看到每个操作的公共代码都被移到了抽象超类中。它基本上与下面的代码相同,只不过稍作了整理以避免冗余。 清单 11. 扫描是否有 pubilc 关键字
扩展Eclipse的Java开发工具(10)时间:2011-02-23 IBM Dan Kehn注: ITerminalSymbols 定义了扫描程序可以返回的标记名称,它们对应于 Java 语法的标准标记。您可以进一步查询扫描程序以询问当前标记在缓冲区中开始和结束的具体位置,它出现在哪一行上,当然还有标记本身(特别是象 ITerminalSymbols.TokenNameStringLiteral 和 ITerminalSymbols.TokenNameIdentifier 这样的例子,它们不是保留的关键字)。 上述代码片段中,向 scanner.setSource 方法提供了编译单元的完整源代码,即 Java 源文件中的所有内容。正如前面提到的,扫描 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |