package Ġio . str lg ht . cut lass . analy zers Ċ Ċ import Ġio . str lg ht . cut lass . analy zers . ext . access None Ċ import Ġio . str lg ht . cut lass . analy zers . ext . snake ToLower Camel Case Ċ import Ġio . str lg ht . cut lass . api . Analyzer Ċ import Ġio . str lg ht . cut lass . api . Analyzer Context Ċ import Ġio . str lg ht . cut lass . api . Finding Ċ import Ġio . str lg ht . cut lass . api . ext . to Cut lass Model Ċ import Ġio . str lg ht . cut lass . api . types . Type Ċ import Ġio . str lg ht . cut lass . utils . ext . safe Cast Ċ import Ġorg . jf . dex lib 2 . Access Flags Ċ import Ġorg . jf . dex lib 2 . iface . Annotation Ċ import Ġorg . jf . dex lib 2 . iface . Class Def Ċ import Ġorg . jf . dex lib 2 . iface . Field Ċ import Ġorg . jf . dex lib 2 . iface . value . String Encoded Value Ċ Ċ class ĠField Annotation Analyzer ( context : ĠAnalyzer Context ) Ġ: ĠAnalyzer ( context ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġname Regex Ġby Ġlazy Ġ{ Ġ"[ a - zA - Z _ ][ a - zA - Z 0 - 9 _ ]{ 2 , }". to Regex () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Common Annotation ( class Def : ĠClass Def ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġclass Def . fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . access None ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccess Flags . STATIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccess Flags . TRAN SI ENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . annotations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . elements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. single OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġis ĠString Encoded Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġfield Annotations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Annotations . forEach Ġ{ Ġannotations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Annotations . forEach Ġ{ Ġannotations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . retain All ( annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single OrNull () ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( class Def : ĠClass Def ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Common Annotation ( class Def ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Def . fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter (:: is FieldName Obfuscated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġprocess Field ( it , ĠType ( annotation ), Ġcontext ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis FieldName Obfuscated ( field : ĠField ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfield . name . length Ġ< ĠMAX _ OB F US C ATED _ NAME _ LENGTH ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Field ( ĊĠĠĠĠĠĠĠ Ġfield : ĠField , ĊĠĠĠĠĠĠĠ Ġannotation Type : ĠType , ĊĠĠĠĠĠĠĠ Ġcontext : ĠAnalyzer Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield . annotations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single OrNull Ġ{ ĠType ( it . type ) Ġ== Ġannotation Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let (:: extract FieldName From Annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFind ing . FieldName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . to Cut lass Model (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract FieldName From Annotation ( annotation : ĠAnnotation ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġannotation . elements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . safe Cast < String Encoded Value >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . matches ( name Regex ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . snake ToLower Camel Case () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ OB F US C ATED _ NAME _ LENGTH Ġ= Ġ 3 ĊĠĠĠ Ġ} Ċ } Ċ