package Ġcom . quick ref . plugin . version Ċ Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġorg . junit . Test Ċ import Ġjava . io . File Ċ Ċ class ĠCode Search Versions Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgenerate Versions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Path Ġ= Ġ" src / test / resources / android - code - search - versions . json " ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( json Path ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( file . read Text ()) ĊĠĠĠĠĠĠĠ Ġval Ġroot Node : ĠJSONObject Ġ= Ġjson . getJSONObject (" roots ") ĊĠĠĠĠĠĠĠ Ġval Ġbranch Tree : ĠJSONArray Ġ= Ġroot Node . get JSONArray (" branch ") ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġbranch Tree . length () ĊĠĠĠĠĠĠĠ Ġval Ġnames Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbranch : ĠJSONObject Ġ= Ġbranch Tree . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnames . add ( branch . getString (" branch Name ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbase Length Ġ= Ġ" android - ". length ĊĠĠĠĠĠĠĠ Ġval Ġkv Ġ= ĠLinkedHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġnames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . length Ġ< Ġbase Length Ġ+ Ġ 2 Ġ|| Ġname . startsWith (" android - "). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvs Ġ= Ġname . sub Sequence ( base Length , Ġbase Length Ġ+ Ġ 1 )[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvs . is Digit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted With ( Version Comparator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġversion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaintain Ġ= Ġversion . substring ( 0 , Ġversion . lastIndexOf ("_ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kv . containsKey ( maint ain ). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ maint ain ] Ġ= Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġout Path Ġ= Ġ" src / test / resources / android - code - search - versions . txt " ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFile ( out Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( output . exists (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . createNew File () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġkv . entries . join ToString ( separator Ġ= Ġ"\ n ", Ġtransform Ġ= Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Pair ("${ entry . key } "," ${ entry . value } "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ""" private Ġval Ġcode Search Versions Ġ= Ġlinked Map Of ($ text ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġoutput . write Text ( code ) ĊĠĠĠ Ġ} Ċ } Ċ