0

背景:

我有一个名为 Component 的 Java 类,其中有一个名为 getProperty 的方法。在我的源代码管理中,还有许多其他 Java 类实例化了这个 Component 类并在该对象上调用 getProperty 方法。我想对此 getProperty 方法进行修改,因此想分析谁都受到了影响。

要求:

我想搜索所有 *.java 文件(根据包名分布在多个目录中)。问题是 getProperty 方法不仅在 Component 类上可用,而且在许多其他类上可用,例如 System.getProperty 或 Event.getProperty。因此,我使用 grep 的搜索结果返回了混合结果。现在我必须扫描每个搜索结果以查找其中哪些与我相关(即它们是 Component.getProperty 方法的调用者)。

一件事是肯定的,如果有人要调用 Component.getProperty 方法,他们会确保他们显式地导入 Component 类。IE。导入 com.abc.xyz.alpha.Component;

所以我的搜索算法的方向是,如果文件有一个字符串“import com.abc.xyz.alpha.Component;” 然后只在该文件中查找 getProperty 字符串。如果该文件没有 import 语句,则跳过该文件并继续下一个文件。

我需要帮助用 perl 编写这个搜索。有人可以帮忙吗?

感谢您阅读这篇长文。谢谢你的时间。

4

1 回答 1

0

粗略地说,

fgrep -l 'import com.abc.xyz.alpha.Component;' *.java |
xargs fgrep getProperty

或者在 Perl 中,

perl -0777ne 'print map { "$ARGV:$_\n" } grep { m/getProperty/ } split ("\n")
    if m/import com\.abc\.xyz\.alpha\.Component;/' *.java
于 2012-08-23T16:15:15.710 回答