package Ġio . he ar tp attern . m cre mapper Ċ Ċ import Ġio . he ar tp attern . m cre mapper . model . Artifact Type Ċ import Ġio . he ar tp attern . m cre mapper . model . Local Variable Fix Type Ċ import Ġio . he ar tp attern . m cre mapper . model . Mapping Ċ import Ġio . he ar tp attern . m cre mapper . parser . pro guard . Mapping Pro guard Parser Ċ import Ġio . he ar tp attern . m cre mapper . preprocess . Super Type Resolver Ċ import Ġio . he ar tp attern . m cre mapper . visitor . Local Variable Fix Visitor Ċ import Ġio . he ar tp attern . m cre mapper . visitor . Mapping Rem apper Ċ import Ġio . he ar tp attern . m cre mapper . visitor . Parameter Annotation Fix Visitor Ċ import Ġio . he ar tp attern . mc versions . MC Versions Ċ import Ġorg . object web . asm . Class Reader Ċ import Ġorg . object web . asm . Class Writer Ċ import Ġorg . object web . asm . commons . Class Rem apper Ċ import Ġorg . object web . asm . tree . Class Node Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip File Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ /** Ċ Ġ* ĠUtility Ġclass Ġfor Ġapplying Ġmapping Ċ Ġ*/ Ċ class ĠMC Rem apper ( ĊĠĠĠ Ġprivate Ġval Ġmapping : ĠMapping , ĊĠĠĠ Ġprivate Ġval Ġsuper Resolver : ĠSuper Type Resolver , ĊĠĠĠ Ġprivate Ġval Ġfix Type : ĠLocal Variable Fix Type Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApply Ġmapping Ġto Ġgiven Ġ[ byteArray ] Ġof Ġbytecode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġfun Ġapply Mapping ( byteArray : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠClass Reader ( byteArray ) ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġapply Mapping ( reader ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠClass Writer ( 0 ) ĊĠĠĠĠĠĠĠ Ġnode . accept ( writer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwriter . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApply Ġmapping Ġto Ġgiven Ġ[ reader ] Ġand Ġreturn Ġmapped Ġ[ Class Node ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġapply Mapping ( reader : ĠClass Reader ): ĠClass Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠClass Node () ĊĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= ĠClass Rem apper ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Variable Fix Visitor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter Annotation Fix Visitor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfix Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMapping Rem apper ( mapping , Ġsuper Resolver ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreader . accept ( visitor , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApply Ġmapping Ġto Ġgiven Ġ[ input ] Ġand Ġsave Ġto Ġ[ output ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġapply Mapping ( ĊĠĠĠĠĠĠĠ Ġinput : ĠFile , ĊĠĠĠĠĠĠĠ Ġoutput : ĠFile , ĊĠĠĠĠĠĠĠ Ġthread : ĠInt Ġ= Ġ 8 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapping Executor Ġ= ĠExec utors . new Fixed ThreadPool ( thread ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Executor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠĠĠĠĠ Ġoutput . delete () ĊĠĠĠĠĠĠĠ Ġoutput . createNew File () ĊĊĠĠĠĠĠĠĠ Ġval Ġzip Input Ġ= ĠZip File ( input ) ĊĠĠĠĠĠĠĠ Ġval Ġzip Output Ġ= ĠZip OutputStream ( File OutputStream ( output )) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġzip Input . entries ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġzip Input . getInputStream ( entry ). read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . name . endsWith (". class ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping Executor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠClass Reader ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġapply Mapping ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠClass Writer ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . accept ( writer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Executor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Output . put Next Entry ( Zip Entry ("${ node . name . to Internal ()}. class ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Output . write ( writer . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Output . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Executor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Output . put Next Entry ( Zip Entry ( entry . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayInputStream ( bytes ). copy To ( zip Output ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Output . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmapping Executor . shutdown () ĊĠĠĠĠĠĠĠ Ġmapping Executor . await Termination ( Long . MAX _ VALUE , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠ Ġoutput Executor . shutdown () ĊĠĠĠĠĠĠĠ Ġoutput Executor . await Termination ( Long . MAX _ VALUE , ĠTimeUnit . HOUR S ) ĊĊĠĠĠĠĠĠĠ Ġzip Output . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġapply Version Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠArtifact Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread : ĠInt Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfix Local Var : ĠLocal Variable Fix Type Ġ= ĠLocal Variable Fix Type . NO ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠMC Versions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion List Ġ= Ġclient . request Version Set Async (). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Info Ġ= Ġclient . request Version Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion List . versions . find Ġ{ Ġit . id Ġ== Ġversion Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException ("$ version Ġdoes Ġnot Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . CLIENT Ġ-> Ġversion Info . downloads . client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . SERVER Ġ-> Ġversion Info . downloads . server ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. url ?. download (" input ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException ("$ version Ġdoes Ġnot Ġprovide Ġ$ type ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Mapping Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . CLIENT Ġ-> Ġversion Info . downloads . client _ mappings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . SERVER Ġ-> Ġversion Info . downloads . server _ mappings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. url ?. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException ("$ version Ġdoes Ġnot Ġprovide Ġmapping Ġof Ġ$ type ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= ĠMapping Pro guard Parser . parse ( raw Mapping ). reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolver Ġ= ĠSuper Type Resolver . from File ( input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre mapper Ġ= ĠMC Rem apper ( mapping , Ġresolver , Ġfix Local Var ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre mapper . apply Mapping ( input , Ġoutput , Ġthread ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ