package Ġio . github . ms eng bus ch . units ystem . module Ċ Ċ import Ġcom . google . devtools . k sp . K sp Experimental Ċ import Ġcom . google . devtools . k sp . processing . K SP Logger Ċ import Ġcom . google . devtools . k sp . processing . Resolver Ċ import Ġcom . google . devtools . k sp . symbol . KS Annotated Ċ import Ġcom . google . devtools . k sp . symbol . KS Class Declaration Ċ import Ġio . github . ms eng bus ch . units ystem . unit . Module Ċ Ċ object ĠModule Scan Ġ{ ĊĠĠĠ Ġfun Ġscan Module ( resolver : ĠResolver , Ġlogger : ĠK SP Logger ): ĠMap < String , ĠPre Module > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresolver . getS ymbols With Annotation ( Module :: class . qualified Name !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġprocess Element ( it , Ġlogger ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By Ġ{ Ġit . className Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( K sp Experimental :: class ) ĊĠĠĠ Ġprivate Ġfun Ġprocess Element ( element : ĠK S Annotated , Ġlogger : ĠK SP Logger ): ĠPre Module Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! is ĠK S Class Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("@ Module Ġcan 't Ġbe Ġapplied Ġto Ġ$ element : Ġmust Ġbe Ġa Ġclass ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġelement . containing File !! ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġelement . qualified Name !!. asString () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPre Module ( file , ĠclassName ) ĊĠĠĠ Ġ} Ċ }