package Ġorg . run est ar . client . updater . mapper Ċ Ċ import Ġorg . object web . asm . Class Reader Ċ import Ġorg . object web . asm . Type Ċ import Ġorg . object web . asm . tree . Class Node Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util . jar . Jar File Ċ Ċ class ĠJar 2 ( val Ġpath : ĠPath ) Ġ{ ĊĊĠĠĠ Ġval Ġclasses Ġ= Ġread Jar ( path ). map Ġ{ ĠClass 2 ( this , Ġit ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclass Resolver Ġ= Ġclasses . associate Ġ{ Ġit . id Ġto Ġit Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmethod Resolver Ġ= Ġclasses . flatMap Ġ{ Ġit . methods Ġ}. associate Ġ{ Ġit . id Ġto Ġit Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfield Resolver Ġ= Ġclasses . flatMap Ġ{ Ġit . fields Ġ}. associate Ġ{ Ġit . id Ġto Ġit Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( class Id : ĠType ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Id Ġin Ġclass Resolver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( fieldId : ĠPair < Type , ĠString >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfieldId Ġin Ġfield Resolver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( method Id : ĠTrip le < Type , ĠString , ĠType >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod Id Ġin Ġmethod Resolver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( class Id : ĠType ): ĠClass 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Resolver . getValue ( class Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( method Id : ĠTrip le < Type , ĠString , ĠType >): ĠMethod 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod Resolver . getValue ( method Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( fieldId : ĠPair < Type , ĠString >): ĠField 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfield Resolver . getValue ( fieldId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Jar ( source : ĠPath , Ġclass Reader Flags : ĠInt Ġ= Ġ 0 ) Ġ: ĠCollection < Class Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJar File ( source . to File ()). use Ġ{ Ġj f Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj f . stream (). iterator (). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name . endsWith (". class ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Node (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Reader ( jf . getInputStream ( it )). accept ( this , Ġclass Reader Flags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }