Nepoužívané triedy smrdia
Stovky tried, desiatky mených priestorov, triedy s podobným menom, niekoľkokrát prepísané triedy a nahradené novými. Manažmentom zrušené celé časti aplikácií hnijúce na miestach, ktoré developeri zďaleka obchádzajú? Je čas opäť upratať ten bordel v projekte.
Začnime s nepoužívanými triedami. Ako ich zistiť? PMD je na túto úlohu prikrátke — vie zistiť len nepoužívané privátne funkcie.
Jono Spiro, chalan ktorý kedysi pracoval na mxml kompilátore, navrhuje použiť nedokumentovaný parameter kompilatora --keep-generated-signatures spolu s -incremental parametrom. Tato kombinácia vygeneruje signatúry všetkých tried do adresára generated-signatures.
Signatúry sú súbory (*.sig) vytvorené z verejných tried, ktoré obsahujú zoznam funkcií, atribútov, importov, metadát atď. a ktoré môžu mať závislosti na iných triedach. Ak sa teda signatúra pre niektorú z tried nevygeneruje, trieda sa nepoužíva. Rozdielom zoznamu signatúr a zoznamu tried budú nepoužívané triedy:
import os, fnmatch
def find_files(path, patterns=(".txt",)):
found = []
for root, dirs, files in os.walk(path):
for pattern in patterns:
for filename in fnmatch.filter(files, pattern):
relative_path = root.split(path)[1]
found.append(os.path.join(relative_path, filename))
return found
def find_unused_classes():
all_sources = find_files(r'e:\path\to\src\\', ('*.as','*.mxml'))
sources = (file.replace(os.sep, '_') for file in all_sources)
signatures = find_files(r'e:\path\to\src\generated-signatures\\', ('*.sig',))
diff = []
for source in sources:
splitted = source.split('.')
transformed = splitted[0]
if splitted[1] == 'mxml':
transformed += '-generated.sig'
else:
transformed += '.sig'
if transformed not in signatures:
print '', source
diff.append(source)
return diff
garbage = find_unused_classes()
Blog comments powered by Disqus