我正在编写一个 Perl 脚本,并且已经到了需要逐行解析 Java 源文件以检查对完全限定 Java 类名的引用的地步。我预先知道我正在寻找的课程;也是正在搜索的源文件的完全限定名称(基于其路径)。
例如,在 com/bob/is/YourUncle.java 文件中查找对 foo.bar.Baz 的所有有效引用。
目前我能想到的需要考虑的情况是:
被解析的文件与搜索类在同一个包中。
在 foo/bar/Boing.java 中找到 foo.bar.Baz 引用
它应该忽略评论。
// this is a comment saying this method returns a foo.bar.Baz or Baz instance // it shouldn't count /* a multiline comment as well this shouldn't count if I put foo.bar.Baz or Baz in here either */
内联完全限定参考。
foo.bar.Baz fb = new foo.bar.Baz();
基于导入语句的引用。
import foo.bar.Baz; ... Baz b = new Baz();
在 Perl 5.8 中最有效的方法是什么?也许是一些花哨的正则表达式?
open F, $File::Find::name or die;
# these three things are already known
# $classToFind looking for references of this class
# $pkgToFind the package of the class you're finding references of
# $currentPkg package name of the file being parsed
while(<F>){
# ... do work here
}
close F;
# the results are availble here in some form