package Ġit . un isa . quality . computation . analysis Ċ Ċ import Ġit . un isa . quality . beans . Class Bean Ċ import Ġit . un isa . quality . beans . Package Bean Ċ import Ġit . un isa . quality . computation . output . Metric Result Ċ import Ġit . un isa . quality . computation . output . Test Production Pair Ċ import Ġit . un isa . quality . rules . code .* Ċ import Ġit . un isa . quality . rules . tests . Indirect Testing Ċ import Ġjava . util .* Ċ Ċ class ĠCode S mell Analyzer ( ĊĠĠĠĠĠĠĠ Ġsource Code Packages : ĠVector < Package Bean > Ċ ) Ġ: ĠAnalyzer Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠIn direct Testing . find Inv ocations ( sourceCode Packages ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclass Data ShouldBe Private Ġ= ĠClass Data ShouldBe Private () ĊĠĠĠ Ġprivate Ġval Ġcomplex Class Ġ= ĠComplex Class () ĊĠĠĠ Ġprivate Ġval Ġfeature Env y Ġ= ĠFeature Env y () ĊĠĠĠ Ġprivate Ġval Ġfunctional De composition Ġ= ĠFunctional De composition () ĊĠĠĠ Ġprivate Ġval Ġgod Class Ġ= ĠGod Class () ĊĠĠĠ Ġprivate Ġval Ġlong Method Ġ= ĠLong Method () ĊĠĠĠ Ġprivate Ġval Ġmessage Chain Ġ= ĠMessage Chain () ĊĠĠĠ Ġprivate Ġval Ġsp ag he tti Code Ġ= ĠSp ag he tti Code () ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Metric For Pair ( pair : ĠTest Production Pair ): ĠList < Metric Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Call Ġcompute Metric For Class ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Metric For Class ( clazz : ĠClass Bean ): ĠList < Metric Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġmutable ListOf < Metric Result >() ĊĠĠĠĠĠĠĠ Ġval Ġclazz Name Ġ= Ġ"${ clazz . bel ong ing Package }.${ clazz . name }" ĊĠĠĠĠĠĠĠ Ġwith ( metrics ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( class Data ShouldBe Private . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Data ShouldBe Private . is Class Data ShouldBe Private ( clazz ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( complex Class . name , Ġcomplex Class . is Complex Class ( clazz , ĠSystem Type . JAVA ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( feature Env y . name , Ġfeature Env y . is Feature Env y ( clazz ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( functional De composition . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional De composition . is Functional De composition ( clazz ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( god Class . name , Ġgod Class . is God Class ( clazz , ĠSystem Type . JAVA ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( long Method . name , Ġlong Method . is Long Method ( clazz ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( message Chain . name , Ġmessage Chain . is Message Chain ( clazz ), Ġclazz Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Metric Result ( sp ag he tti Code . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ag he tti Code . is Sp ag he tti Code ( clazz , ĠSystem Type . JAVA ), Ġclazz Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmetrics ĊĠĠĠ Ġ} Ċ }