@ file : Jvm Name (" Lib s ") Ċ Ċ package Ġcom . mike pen z . about libraries Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . mike pen z . about libraries . detector . Detect Ċ import Ġcom . mike pen z . about libraries . entity . Library Ċ import Ġcom . mike pen z . about libraries . entity . License Ċ import Ġcom . mike pen z . about libraries . util .* Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ public Ġclass ĠLib s ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġfields : ĠArray < String > Ġ= Ġcontext . get Fields (), ĊĠĠĠĠĠĠĠ Ġlibrary Enchant ments : ĠMap < String , ĠString > Ġ= Ġempty Map () Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġused Gradle Plugin Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġintern Libraries Ġ= Ġmutable ListOf < Library >() ĊĠĠĠ Ġprivate Ġval Ġextern Libraries Ġ= Ġmutable ListOf < Library >() ĊĠĠĠ Ġprivate Ġval Ġlicenses Ġ= Ġmutable ListOf < License >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġavailable ĠLibraries ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArrayList ĠLibrary Ġwith Ġall Ġavailable ĠLibraries ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlibraries : ĠList < Library > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibs Ġ= Ġmutable ListOf < Library >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibs . addAll ( get Intern Libraries ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibs . addAll ( get Ex tern Libraries ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlibs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠKeys Ġto Ġhandle Ġspecific Ġfields Ġdescribing Ġa ĠLibrary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠLibrary Fields Ġ{ ĊĠĠĠĠĠĠĠ ĠAUTHOR _ NAME , ĊĠĠĠĠĠĠĠ ĠAUTHOR _ WE BS ITE , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ NAME , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ DESCRIPTION , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ VERSION , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ AR TI FACT _ ID , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ WE BS ITE , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ OPEN _ SOURCE , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ REPOSITORY _ LINK , ĊĠĠĠĠĠĠĠ ĠLIB R ARY _ CLAS SPATH , ĊĊĠĠĠĠĠĠĠ Ġ@ Deprecated (" Note Ġthis Ġonly Ġwill Ġwork Ġfor Ġlibraries Ġwith Ġa Ġsingle Ġlicense , Ġo te hr wise Ġonly Ġthe Ġfirst Ġis Ġmodified ") ĊĠĠĠĠĠĠĠ ĠLICENSE _ NAME , ĊĊĠĠĠĠĠĠĠ Ġ@ Deprecated (" Note Ġthis Ġonly Ġwill Ġwork Ġfor Ġlibraries Ġwith Ġa Ġsingle Ġlicense , Ġo te hr wise Ġonly Ġthe Ġfirst Ġis Ġmodified ") ĊĠĠĠĠĠĠĠ ĠLICENSE _ SHORT _ DESCRIPTION , ĊĊĠĠĠĠĠĠĠ Ġ@ Deprecated (" Note Ġthis Ġonly Ġwill Ġwork Ġfor Ġlibraries Ġwith Ġa Ġsingle Ġlicense , Ġo te hr wise Ġonly Ġthe Ġfirst Ġis Ġmodified ") ĊĠĠĠĠĠĠĠ ĠLICENSE _ DESCRIPTION , ĊĊĠĠĠĠĠĠĠ Ġ@ Deprecated (" Note Ġthis Ġonly Ġwill Ġwork Ġfor Ġlibraries Ġwith Ġa Ġsingle Ġlicense , Ġo te hr wise Ġonly Ġthe Ġfirst Ġis Ġmodified ") ĊĠĠĠĠĠĠĠ ĠLICENSE _ WE BS ITE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠSpecial Button Ġ{ ĊĠĠĠĠĠĠĠ ĠSPECIAL 1 , ĊĠĠĠĠĠĠĠ ĠSPECIAL 2 , ĊĠĠĠĠĠĠĠ ĠSPECIAL 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinit Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound License Identifiers Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġfound Internal Library Identifiers Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġfound External Library Identifiers Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġfound Plugin Library Identifiers Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . startsWith ( DEFINE _ LICENSE ) Ġ-> Ġfound License Identifiers . add ( field . replace ( DEFINE _ LICENSE , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . startsWith ( DEFINE _ INT ) Ġ-> Ġfound Internal Library Identifiers . add ( field . replace ( DEFINE _ INT , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . startsWith ( DEFINE _ PLUGIN ) Ġ-> Ġfound Plugin Library Identifiers . add ( field . replace ( DEFINE _ PLUGIN , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . startsWith ( DEFINE _ EXT ) Ġ-> Ġfound External Library Identifiers . add ( field . replace ( DEFINE _ EXT , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġlicenses ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġhas Ġto Ġhappen Ġfirst Ġas Ġthe Ġlicenses Ġneed Ġto Ġbe Ġinitialized Ġbefore Ġthe Ġlibraries Ġare Ġread Ġin ĊĠĠĠĠĠĠĠ Ġfor Ġ( license Identifier Ġin Ġfound License Identifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicense Ġ= Ġgen License ( context , Ġlicense Identifier ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlicenses . add ( license ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// add Ġplugin Ġlibs ĊĠĠĠĠĠĠĠ Ġfor Ġ( plugin Library Identifier Ġin Ġfound Plugin Library Identifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġgen Library ( context , Ġplugin Library Identifier ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . is Internal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . is Plugin Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextern Libraries . add ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġused Gradle Plugin Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen chant With Key Ġ= Ġlibrary Enchant ments [ plugin Library Identifier ] Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen chant With Ġ= Ġgen Library ( context , Ġen chant With Key ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . ench ant By ( ench ant With ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġused Ġthe Ġgradle Ġplugin Ġto Ġresolve Ġlibraries , Ġonly Ġuse Ġthose ĊĠĠĠĠĠĠĠ Ġif Ġ( found Plugin Library Identifiers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// add Ġinternal Ġlibs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( internal Identifier Ġin Ġfound Internal Library Identifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġgen Library ( context , Ġinternal Identifier ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . is Internal Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintern Libraries . add ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// add Ġexternal Ġlibs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( external Identifier Ġin Ġfound External Library Identifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġgen Library ( context , Ġexternal Identifier ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . is Internal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextern Libraries . add ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġsummarize Ġall Ġlibraries Ġand Ġel imate Ġduplicates ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinternal Libraries ĠĠĠ Ġthe ĠString [] Ġwith Ġthe Ġinternal Libraries Ġ( if Ġset Ġmanual ) ĊĠĠĠĠ Ġ* Ġ@ param Ġexclude Libraries ĠĠĠĠ Ġthe ĠString [] Ġwith Ġthe Ġlibs Ġto Ġbe Ġexcluded ĊĠĠĠĠ Ġ* Ġ@ param Ġauto Detect ĠĠĠĠĠĠĠĠĠĠ Ġdefines Ġif Ġthe Ġlibraries Ġshould Ġbe Ġresolved Ġby Ġtheir Ġclasspath Ġ( if Ġpossible ) ĊĠĠĠĠ Ġ* Ġ@ param Ġcheck Cached Detection Ġdefines Ġif Ġwe Ġshould Ġcheck Ġthe Ġcached Ġaut ode tected Ġlibraries Ġ( per Ġversion ) Ġ( default : Ġenabled ) ĊĠĠĠĠ Ġ* Ġ@ param Ġsort ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefines Ġif Ġthe Ġarray Ġshould Ġbe Ġsorted ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsummar ized Ġlist Ġof Ġincluded ĠLibraries ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprepare Libraries ( ctx : ĠContext , Ġinternal Libraries : ĠArray < out ĠString > Ġ= Ġempty Array (), Ġexclude Libraries : ĠArray < out ĠString > Ġ= Ġempty Array (), Ġauto Detect : ĠBoolean Ġ= Ġtrue , Ġcheck Cached Detection : ĠBoolean Ġ= Ġtrue , Ġsort : ĠBoolean Ġ= Ġtrue ): ĠArrayList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Ex cluding Ġ= Ġexclude Libraries . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġval Ġlibraries Ġ= ĠHashMap < String , ĠLibrary >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Libraries Ġ= ĠArrayList < Library >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! used Gradle Plugin Ġ&& Ġauto Detect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauto Detected Ġ= Ġget Auto Detected Libraries ( ctx , Ġcheck Cached Detection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Libraries . addAll ( auto Detected ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ex cluding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( lib Ġin Ġauto Detected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries [ lib . defined Name ] Ġ= Ġlib ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Add Ġall Ġexternal Ġlibraries ĊĠĠĠĠĠĠĠ Ġval Ġextern Ġ= Ġget Ex tern Libraries () ĊĠĠĠĠĠĠĠ Ġresult Libraries . addAll ( extern ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Ex cluding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( lib Ġin Ġextern ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries [ lib . defined Name ] Ġ= Ġlib ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Now Ġadd Ġall Ġlibs Ġwhich Ġdo Ġnot Ġcontain Ġthe Ġinfo Ġfile , Ġbut Ġare Ġin Ġthe ĠAbout Libraries Ġlib ĊĠĠĠĠĠĠĠ Ġif Ġ( internal Libraries . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( internal Library Ġin Ġinternal Libraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Ġ= Ġget Library ( internal Library ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Libraries . add ( lib ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries [ lib . defined Name ] Ġ= Ġlib ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// remove Ġlibraries Ġwhich Ġshould Ġbe Ġexcluded ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ex cluding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( exclude Library Ġin Ġexclude Libraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Ġ= Ġlibraries [ exclude Library ] Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Libraries . remove ( lib ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sort ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Libraries . sort () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Libraries ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġauto Detected ĠLibraries ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġcurrent Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġcheck Cached Detection Ġdefines Ġif Ġwe Ġshould Ġcheck Ġthe Ġcached Ġaut ode tected Ġlibraries Ġ( per Ġversion ) Ġ( default : Ġenabled ) ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArrayList ĠLibrary Ġwith Ġall Ġfound Ġlibs Ġby Ġtheir Ġclasspath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Auto Detected Libraries ( ctx : ĠContext , Ġcheck Cached Detection : ĠBoolean ): ĠList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpi Ġ= Ġctx . get Package Info () ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġctx . get SharedPreferences (" about Libraries ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Cache Version Ġ= Ġshared Preferences . getInt (" version Code ", Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġis Cache Up ToDate Ġ= Ġpi Ġ!= Ġnull Ġ&& Ġlast Cache Version Ġ== Ġpi . version Code ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check Cached Detection ) Ġ{ Ġ// Retrieve Ġfrom Ġcache Ġif Ġup Ġto Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pi Ġ!= Ġnull Ġ&& Ġis Cache Up ToDate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauto Detected Libraries Ġ= Ġshared Preferences . getString (" auto Detected Libraries ", Ġ"") ?. split ( DE LIMITER . to Regex ()) ?. drop Last While Ġ{ Ġit . isEmpty () Ġ} ?. to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Detected Libraries ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibraries Ġ= ĠArrayList < Library >( auto Detected Libraries . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( auto Detected Library Ġin Ġauto Detected Libraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Ġ= Ġget Library ( auto Detected Library ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries . add ( lib ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlibraries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlibraries Ġ= ĠDetect . detect ( ctx , Ġlibraries ) ĊĠĠĠĠĠĠĠ Ġif Ġ( pi Ġ!= Ġnull Ġ&& Ġ! is Cache Up ToDate ) Ġ{ Ġ// Update Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauto Detected Libraries Pref Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( lib Ġin Ġlibraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Detected Libraries Pref . append ( DE LIMITER ). append ( lib . defined Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Int (" version Code ", Ġpi . version Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString (" auto Detected Libraries ", Ġauto Detected Libraries Pref . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlibraries ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġintern Ġavailable ĠLibraries ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArrayList ĠLibrary Ġwith Ġall Ġavailable Ġintern Libraries ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Intern Libraries (): ĠArrayList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( intern Libraries ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġextern Ġavailable ĠLibraries ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArrayList ĠLibrary Ġ Ġwith Ġall Ġavailable Ġextern Libraries ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Ex tern Libraries (): ĠArrayList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( extern Libraries ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġavailable Ġlicenses ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArray LI st ĠLicense Ġ Ġwith Ġall Ġavailable ĠLicense s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget License s (): ĠArrayList < License > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( licenses ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġlibrary Ġby Ġits Ġname Ġ( the Ġname Ġmust Ġbe Ġequal ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlibrary Name Ġthe Ġname Ġof Ġthe Ġlib Ġ( NOT Ġcase Ġs ensit iv ) Ġor Ġthe Ġreal Ġname Ġof Ġthe Ġlib Ġ( this Ġis Ġthe Ġname Ġused Ġfor Ġgithub ) ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġfound Ġlibrary Ġor Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Library ( library Name : ĠString ): ĠLibrary ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( library Ġin Ġlibraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library . library Name . equals ( library Name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( library . defined Name . equals ( library Name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġa Ġlibrary Ġby Ġa Ġsearch Term Ġ( Limit Ġthe Ġresults Ġif Ġthere Ġare Ġmore Ġthan Ġone ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsearch Term Ġthe Ġterm Ġwhich Ġis Ġin Ġthe Ġlibs Ġname Ġ( NOT Ġcase Ġs ensit iv ) Ġor Ġthe Ġreal Ġname Ġof Ġthe Ġlib Ġ( this Ġis Ġthe Ġname Ġused Ġfor Ġgithub ) ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit ĠĠĠĠĠ Ġ- 1 Ġfor Ġall Ġresults Ġor Ġsmaller Ġ 0 Ġfor Ġa Ġlimit ted Ġresult ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠArrayList ĠLibrary Ġwith Ġthe Ġfound Ġintern Libraries ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Library ( search Term : ĠString , Ġlimit : ĠInt ): ĠList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind ( libraries , Ġsearch Term , Ġfalse , Ġlimit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġsearch Term ĊĠĠĠĠ Ġ* Ġ@ param Ġid Only ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind In Internal Library ( search Term : ĠString , Ġid Only : ĠBoolean , Ġlimit : ĠInt ): ĠList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind ( get Intern Libraries (), Ġsearch Term , Ġid Only , Ġlimit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġsearch Term ĊĠĠĠĠ Ġ* Ġ@ param Ġid Only ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind In External Library ( search Term : ĠString , Ġid Only : ĠBoolean , Ġlimit : ĠInt ): ĠList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind ( get Ex tern Libraries (), Ġsearch Term , Ġid Only , Ġlimit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlibraries ĊĠĠĠĠ Ġ* Ġ@ param Ġsearch Term ĊĠĠĠĠ Ġ* Ġ@ param Ġid Only ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind ( libraries : ĠList < Library >, Ġsearch Term : ĠString , Ġid Only : ĠBoolean , Ġlimit : ĠInt ): ĠList < Library > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Lib s Ġ= ĠArrayList < Library >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( library Ġin Ġlibraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library . defined Name . contains ( search Term , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Lib s . add ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ!= Ġ- 1 Ġ&& Ġlimit Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library . library Name . contains ( search Term , Ġtrue ) Ġ|| Ġlibrary . defined Name . contains ( search Term , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Lib s . add ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ!= Ġ- 1 Ġ&& Ġlimit Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlocal Lib s ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlicense Name ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget License ( license Name : ĠString ): ĠLicense ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( license Ġin Ġget License s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( license . license Name . equals ( license Name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlicense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( license . defined Name . equals ( license Name , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlicense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlicense Name ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgen License ( ctx : ĠContext , Ġlicense Name : ĠString ): ĠLicense ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlicense Ġ= Ġlicense Name . replace ("- ", Ġ"_ ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlicense Description Ġ= Ġctx . getString Resource ByName (" license _" Ġ+ Ġlicense Ġ+ Ġ"_ license Description ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( license Description . startsWith (" raw :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Description Ġ= Ġctx . resources . open Raw Resource ( ctx . getRaw ResourceId ( license Description . remove Prefix (" raw :" ))). buffered Reader (). use Ġ{ Ġit . read Text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLicense ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getString Resource ByName (" license _" Ġ+ Ġlicense Ġ+ Ġ"_ license Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getString Resource ByName (" license _" Ġ+ Ġlicense Ġ+ Ġ"_ license Website "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getString Resource ByName (" license _" Ġ+ Ġlicense Ġ+ Ġ"_ license Short Description "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" about libraries ", Ġ" Failed Ġto Ġgenerate License Ġfrom Ġfile : Ġ" Ġ+ Ġex . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlibrary Name ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgen Library ( ctx : ĠContext , Ġlibrary Name : ĠString ): ĠLibrary ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġlibrary Name . replace ("- ", Ġ"_ ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Ġ= ĠLibrary ( defined Name Ġ= Ġname , Ġlibrary Name Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ library Name ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġcustom Ġvars Ġto Ġinsert Ġinto Ġdefined Ġareas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Variables Ġ= Ġget Custom Variables ( ctx , Ġname ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . author Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ author ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . author Website Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ author Website ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Description Ġ= Ġinsert Variables ( ctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ library Description "), Ġcustom Variables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Version Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ library Version ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Artifact Id Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ library Artifact Id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Website Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ library Website ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicense Ids Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ license Ids ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( license Ids . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicense Ġ= ĠLicense ("", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ license Version "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ license Link "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Variables ( ctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ license Content "), Ġcustom Variables ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Variables ( ctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ license Content "), Ġcustom Variables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . licenses Ġ= Ġset Of ( license ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlicenses Ġ= Ġmutable Set Of < License >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Ids . split ("," ). on Each Ġ{ Ġlicense Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlicense Ġ= Ġget License ( license Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( license Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Ġ= Ġlicense . copy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense . license Short Description Ġ= Ġinsert Variables ( license . license Short Description , Ġcustom Variables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense . license Description Ġ= Ġinsert Variables ( license . license Description , Ġcustom Variables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicenses . add ( license ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . licenses Ġ= Ġlicenses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . isOpen Source Ġ= Ġjava . lang . Boolean . valueOf ( ctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ isOpen Source ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . repository Link Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ repository Link ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlib . class Path Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġname Ġ+ Ġ"_ class Path ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lib . library Name . isBlank () Ġ&& Ġlib . library Description . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" about libraries ", Ġ" Failed Ġto Ġgenerate Library Ġfrom Ġfile : Ġ$ ex ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġlibrary Name ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Custom Variables ( ctx : ĠContext , Ġlibrary Name : ĠString ): ĠHashMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcustom Variables Ġ= ĠHashMap < String , ĠString >() ĊĊĠĠĠĠĠĠĠ Ġval Ġcustom Variables String Ġ= Ġsequence Of ( DEFINE _ EXT , ĠDEFINE _ INT , ĠDEFINE _ PLUGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġctx . getString Resource ByName ("$ it $ library Name ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( custom Variables String . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Variable Array Ġ= Ġcustom Variables String . split ("; ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom Variable Array . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( custom Variable Key Ġin Ġcustom Variable Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Variable Content Ġ= Ġctx . getString Resource ByName (" library _" Ġ+ Ġlibrary Name Ġ+ Ġ"_" Ġ+ Ġcustom Variable Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom Variable Content . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Variables [ custom Variable Key ] Ġ= Ġcustom Variable Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcustom Variables ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Variables ( insert Into Var : ĠString , Ġvariables : ĠHashMap < String , ĠString >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinsert Into Ġ= Ġinsert Into Var ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġvariables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Into Ġ= Ġinsert Into . replace (" <<< " Ġ+ Ġkey . toUpperCase ( Locale . US ) Ġ+ Ġ" >> >", Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// remove Ġthe Ġplaceholder Ġchars Ġso Ġthe Ġlicense Ġis Ġshown Ġcorrect ĊĠĠĠĠĠĠĠ Ġinsert Into Ġ= Ġinsert Into . replace (" <<< ", Ġ"") ĊĠĠĠĠĠĠĠ Ġinsert Into Ġ= Ġinsert Into . replace ("> >> ", Ġ"") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinsert Into ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmodifications ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmodify Libraries ( mod ifications : ĠHashMap < String , ĠHashMap < String , ĠString >> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodifications Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key 1 , Ġvalue 1 ) Ġin Ġmodifications ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Lib s : ĠList < Library >? Ġ= Ġfind In External Library ( key 1 , Ġtrue , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Lib s Ġ== Ġnull Ġ|| Ġfound Lib s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Lib s Ġ= Ġfind In Internal Library ( key 1 , Ġtrue , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Lib s . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Ġ= Ġfound Lib s [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key 2 , Ġvalue ) Ġin Ġvalue 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( key 2 . toUpperCase ( Locale . US )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . AUTHOR _ NAME . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . author Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . AUTHOR _ WE BS ITE . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . author Website Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ NAME . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Name Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ DESCRIPTION . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Description Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ VERSION . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Version Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ AR TI FACT _ ID . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Artifact Id Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ WE BS ITE . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . library Website Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ OPEN _ SOURCE . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . isOpen Source Ġ= Ġjava . lang . Boolean . parse Boolean ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ REPOSITORY _ LINK . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . repository Link Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LIBRARY _ CLAS SPATH . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// note Ġthis Ġcan Ġbe Ġset Ġbut Ġwon 't Ġprobably Ġwork Ġfor Ġaut ode t ect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . class Path Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LICENSE _ NAME . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lib . license Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license Ġ= ĠLicense ("", Ġ"", Ġ"", Ġ"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license ?. license Name Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LICENSE _ SHORT _ DESCRIPTION . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lib . license Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license Ġ= ĠLicense ("", Ġ"", Ġ"", Ġ"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license ?. license Short Description Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LICENSE _ DESCRIPTION . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lib . license Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license Ġ= ĠLicense ("", Ġ"", Ġ"", Ġ"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license ?. license Description Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLibrary Fields . LICENSE _ WE BS ITE . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lib . license Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license Ġ= ĠLicense ("", Ġ"", Ġ"", Ġ"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib . license ?. license Website Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB UNDLE _ TITLE Ġ= Ġ" AB OUT _ LIBRARIES _ TITLE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB UNDLE _ EDGE _ TO _ EDGE Ġ= Ġ" AB OUT _ LIBRARIES _ EDGE _ TO _ EDGE " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFINE _ LICENSE Ġ= Ġ" define _ license _" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFINE _ INT Ġ= Ġ" define _ int _" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFINE _ PLUGIN Ġ= Ġ" define _ pl u _" ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠDEFINE _ EXT Ġ= Ġ" define _" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDE LIMITER Ġ= Ġ";" ĊĊĠĠĠĠĠĠĠ Ġfun Ġclass Fields ( r Class : ĠClass < *> ): ĠArray < String > Ġ= Ġr Class . fields . toString Array () ĊĠĠĠ Ġ} Ċ } Ċ