#!/usr/bin/perl
#
# added by jmason to support identifying references to java system classes in
# LXR-cross-referenced .java files.
#
# This only needs to be run when a new version of the Java system class set is
# released. The bundled JavaClassList.pm should do the trick nicely.
# 
# This tool requires that the Info-Zip tool 'zipinfo' is installed in the PATH.

use lib 'lib/';

if (!defined ($ARGV[0])) {
    die "usage: genjavaclasses { java_classes.zip | java_classes.jar }\n";
}

$classes_zip = $ARGV[0];
open (ZIPINFO, "zipinfo $classes_zip |")
			 || die "cannot run 'zipinfo $classes_zip'\n";

$outfile = $INC[0]."/JavaClassList.pm";
open (OUT, "> $outfile.new") || die "cannot write to '$outfile.new'\n";

print OUT '# [Generated by genjavaclasses at '.localtime().']

    package JavaClassList;
    require Exporter;
    @ISA = qw(Exporter);
    @EXPORT = qw(&is_java_class);

    sub is_java_class {
	local ($name, @imported_packages) = @_;
	local ($_);

        if (!defined %java_system_classes) {
          foreach $_ (@java_system_classes) { $java_system_classes{$_} = 1; }
        }

        if (defined ($java_system_classes{$name})) { return 1; }

	foreach $_ (@imported_packages) {
	    if (defined ($java_system_classes{$_.$name})) { return 1; }
	}
	0;
    }

    @java_system_classes = qw(
    	# AUTOMATICALLY GENERATED LIST STARTS HERE
';

while (<ZIPINFO>) {
    / (\S+)\.class\s*$/ || next;
    $_ = $1; s,/,.,g; print OUT "\t$_\n";
}
close ZIPINFO || die "'zipinfo $classes_zip' failed\n";

print OUT '
    	# AUTOMATICALLY GENERATED LIST ENDS HERE
    );

    1;
';

if (-r $outfile) {
    rename ($outfile, "$outfile.bak") || die "rename of $outfile failed\n";
}
rename ("$outfile.new", $outfile) || die "rename to $outfile failed\n";
exit;

# vim:sw=4:
