blob: 83897d4ecf70a2cc060e411afed8d2672867beee [file] [log] [blame]
Yotam Harchol466b3212013-08-15 12:14:46 -07001#!/usr/bin/python
2
3import sys
4import re
5
6class ImportLine:
7 def __init__(self, line):
8 self.line = line
9 class_name = None
10 if line[len(line) - 1] == '*':
11 class_name = '*'
12 else:
13 i = 7
14 while i < len(line) - 1:
15 if re.match('\.[A-Z][\..]*$', line[i - 1 : len(line) - 1]):
16 class_name = line[i : len(line) - 1]
17 break
18 i = i + 1
19 if class_name is None:
20 class_name = line[line.rfind('.') + 1 : len(line) - 1]
21 self.class_name = class_name
22
23
24class ImportCleaner:
25 def __init__(self, path):
26 f = open(path)
27 self.imp_lines = []
28 self.code_lines = []
29 self.imports_first_line = -1
30 i = 0
31 for line in f:
32 if len(line) > 6 and re.match('^[ \t]*import ', line):
33 self.imp_lines.append(ImportLine(line.rstrip()))
34 if self.imports_first_line == -1:
35 self.imports_first_line = i
36 else:
37 self.code_lines.append(line.rstrip())
38 i = i + 1
39 f.close()
40
41 def find_used_imports(self):
42 self.used_imports = []
43 for line in self.code_lines:
44 temp = []
45 for imp in self.imp_lines:
46 if imp.class_name == '*' or line.find(imp.class_name) > -1:
47 temp.append(imp)
48 for x in temp:
49 self.imp_lines.remove(x)
50 self.used_imports.append(x)
51
52 def rewrite_file(self, path):
53 f = open(path, 'w')
54 imports_written = False
55 for i in range(len(self.code_lines)):
56 if not imports_written and self.imports_first_line == i:
57 # Put all imports
58 for imp in self.used_imports:
59 f.write(imp.line + '\n')
60 imports_written = True
61 # Put next code line
62 f.write(self.code_lines[i] + '\n')
63 f.close()
64
65def main(argv):
66 if len(argv) != 2:
67 print 'Usage: ImportCleaner <java file>'
68 return
69
70 filename = argv[1]
71 print 'Cleaning imports from file %s' % (filename)
72 cleaner = ImportCleaner(filename)
73 cleaner.find_used_imports()
74 cleaner.rewrite_file(filename)
75
76if __name__ == '__main__':
77 main(sys.argv)