package Ġio . str lg ht . cut lass . analy zers . km Ċ Ċ import Ġio . str lg ht . cut lass . analy zers . ext . access None Ċ import Ġio . str lg ht . cut lass . analy zers . ext . isNot Constructor Ċ import Ġio . str lg ht . cut lass . analy zers . ext . jvm Methods Signatures Ċ import Ġio . str lg ht . cut lass . analy zers . ext . parameter Types Raw Ċ import Ġio . str lg ht . cut lass . analy zers . ext . returnType Ċ import Ġio . str lg ht . cut lass . analy zers . ext . simplify Types Ċ 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 Ġkotlinx . metadata . Km Class Ċ import Ġkotlinx . metadata . jvm . Jvm Method Signature Ċ import Ġorg . jf . dex lib 2 . Access Flags Ċ import Ġorg . jf . dex lib 2 . iface . Class Def Ċ import Ġorg . jf . dex lib 2 . iface . Method Ċ Ċ internal Ġclass ĠMethod Names Metadata Processor Ġ: ĠKotlin Metadata Processor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprocess ( ĊĠĠĠĠĠĠĠ Ġclass Def : ĠClass Def , ĊĠĠĠĠĠĠĠ Ġkm Class : ĠK m Class , ĊĠĠĠĠĠĠĠ Ġcontext : ĠAnalyzer Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Methods Ġ= Ġclass Def . methods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . isNot Constructor () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . access None ( Access Flags . SYN TH ET IC , ĠAccess Flags . STATIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkm Methods Ġ= Ġkm Class . jvm Methods Signatures ĊĠĠĠĠĠĠĠ Ġmatch Methods ( class Methods , Ġkm Methods , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch Methods ( ĊĠĠĠĠĠĠĠ Ġclass Methods : ĠList < Method >, ĊĠĠĠĠĠĠĠ Ġkm Methods : ĠList < Jvm Method Signature >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠAnalyzer Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpredicate Ġ= Ġcontext :: is Library Type ĊĊĠĠĠĠĠĠĠ Ġval Ġkm Map Ġ= Ġkm Methods . groupBy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( it . parameter Types Raw . simplify Types ( predicate )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" )", Ġit . returnType . simplify Types ( predicate )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbytecode Map Ġ= Ġclass Methods . groupBy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( it . parameter Types . join ToString (" "). simplify Types ( predicate )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" )", Ġit . returnType . simplify Types ( predicate )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkm Map . keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġbytecode Map . containsKey ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkm List Ġ= Ġkm Map [ it ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytecode List Ġ= Ġbytecode Map [ it ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch And Report Method ( km List , Ġbytecode List , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatch And Report Method ( ĊĠĠĠĠĠĠĠ Ġkm List : ĠList < Jvm Method Signature >, ĊĠĠĠĠĠĠĠ Ġbytecode List : ĠList < Method >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠAnalyzer Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkm Method Ġ= Ġkm List . single OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġbytecode Method Ġ= Ġbytecode List . single OrNull () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( km Method Ġ== Ġnull Ġ|| Ġbytecode Method Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( km Method . name Ġ== Ġbytecode Method . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext . report ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFind ing . MethodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode Method . to Cut lass Model (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkm Method . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ