#!/usr/bin/perl -w # check java files for extra imports use strict; use Getopt::Std; use vars qw($opt_v); #parse command line if(!getopts('v')) { # error &usage(); } my $filename = ''; for $filename (@ARGV) { my $output = ''; open INPUT, $filename; my %imports = (); my $class = ''; my $lineno = 1; my %count = (); while() { if(/^import (.*);/) { my $imp = $1; $imp =~ s/\s*//g; my $key = $filename.":".$lineno.": ".$imp; my @packs = split(/\./, $imp); my $classp = $packs[$#packs]; if($key =~ /\*/) { $output .= "$key - Use explicit imports!\n"; } else { $imports{$key} = $classp; if(! defined $count{$imp}) { $count{$imp} = $key; } else { $output .= "$key - Duplicate import!\n"; } } } else { $class = $class.$_; } $lineno++; } # get rid of comments $class =~ s/\/\/[^\n]*\n//gs; $class =~ s/\/\*.*?\*\///gs; my $flag = 0; my $key = ''; for $key (keys %imports) { # print "$key $imports{$key}\n"; my $foo = $class; unless($foo =~ /[\s(){}+\-\/*%^!~|&=,]($imports{$key})[\s;\[,.\s)({}]/s) { $output .= "$key not used\n"; } } print "Checking $filename for extra imports\n" if $opt_v; if($output) { print "$output\n"; } } exit; sub usage { print STDERR "usage: $0 -v file ...\n"; print STDERR "-v verbose\n"; exit 1; }