/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . bir bit . artifact finder . parser Ċ Ċ import Ġcom . bir bit . artifact finder . parser . vo . Class Zip Entry Ċ import Ġcom . bir bit . artifact finder . parser . vo . Code Source Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġjar Ġartifact Ċ Ġ*/ Ċ class ĠJar ( ĊĠĠĠ Ġprivate Ġval ĠinputStream : ĠInputStream Ċ ) Ġ: ĠCode Source Ġ{ ĊĠĠĠ Ġoverride Ġval Ġclass Declarations ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠZip InputStream ( inputStream ). as Class File Sequence () Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresents Ġan ĠA AR Ġartifact Ċ Ġ*/ Ċ class ĠA ar ( ĊĠĠĠ Ġprivate Ġval ĠinputStream : ĠInputStream Ċ ) Ġ: ĠCode Source Ġ{ ĊĠĠĠ Ġoverride Ġval Ġclass Declarations ĊĠĠĠĠĠĠĠ Ġget (): ĠSequence < Class Zip Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Ġ= ĠZip InputStream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasses Jar Ġ= Ġzip . as Entry Sequence (). first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġ" classes . jar " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠZip InputStream ( classes Jar ). as Class File Sequence () ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠZip InputStream . as Class File Sequence (): ĠSequence < Class Zip Entry > Ġ{ ĊĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ as Class File Sequence . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next . name . endsWith (". class ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġthis @ as Class File Sequence . read Bytes () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Zip Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Ġ= Ġnext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Ġ= Ġbytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( io . message Ġ== Ġ" Stream Ġclosed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠZip InputStream . as Entry Sequence (): ĠSequence < Zip Entry > Ġ{ ĊĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ as Entry Sequence . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġnext Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ