私はPerlスクリプトを書いていますが、完全修飾されたJavaクラス名への参照を1行ずつチェックして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ステートメントに基づく参照。
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