#!/usr/local/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(<INPUT>) {
    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;
}
