/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 - 2 0 1 9 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġcom . here . glue co di um Ċ Ċ import Ġcom . android . man if mer ger . Mer ger Ċ import Ġcom . here . glue co di um . cache . Split Source Set Cache Ċ import Ġcom . here . glue co di um . cli . Gl ue co di um ExecutionException Ċ import Ġcom . here . glue co di um . cli . Option Reader Ċ import Ġcom . here . glue co di um . cli . Option Reader Exception Ċ import Ġcom . here . glue co di um . common . L ime Logger Ċ import Ġcom . here . glue co di um . generator . common . Generated File Ċ import Ġcom . here . glue co di um . generator . common . templates . Template Engine Ċ import Ġcom . here . glue co di um . loader . get Loader Ċ import Ġcom . here . glue co di um . model . lime . L ime Model Ċ import Ġcom . here . glue co di um . model . lime . L ime Model Loader Ċ import Ġcom . here . glue co di um . model . lime . L ime Model Loader Exception Ċ import Ġcom . here . glue co di um . output . File Output Ċ import Ġcom . here . glue co di um . platform . android . Java Generator Suite Ċ import Ġcom . here . glue co di um . platform . common . Generator Suite Ċ import Ġcom . here . glue co di um . validator . L ime De prec ations Validator Ċ import Ġcom . here . glue co di um . validator . L ime Enumerator Refs Validator Ċ import Ġcom . here . glue co di um . validator . L ime External Types Validator Ċ import Ġcom . here . glue co di um . validator . L ime Functions Validator Ċ import Ġcom . here . glue co di um . validator . L ime Generic Types Validator Ċ import Ġcom . here . glue co di um . validator . L ime Inheritance Validator Ċ import Ġcom . here . glue co di um . validator . L ime Properties Validator Ċ import Ġcom . here . glue co di um . validator . L ime Serializable Struct s Validator Ċ import Ġcom . here . glue co di um . validator . L ime Struct s Validator Ċ import Ġcom . here . glue co di um . validator . L ime Type Ref Target Validator Ċ import Ġcom . here . glue co di um . validator . L ime Type Refs Validator Ċ import Ġcom . nat pr y ce . kon fig . Configuration Ċ import Ġcom . nat pr y ce . kon fig . Configuration Properties Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . Properties Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Log Manager Ċ import Ġjava . util . logging . Logger Ċ import Ġkotlin . system . exit Process Ċ Ċ class ĠGl ue co di um ( ĊĠĠĠ Ġprivate Ġval Ġoptions : ĠOptions , ĊĠĠĠ Ġprivate Ġval Ġmodel Loader : ĠL ime Model Loader Ġ= ĠL ime Model Loader . get Loader () Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġval Ġcache Ġ= ĠSplit Source Set Cache ( ĊĠĠĠĠĠĠĠ Ġoptions . output Dir , ĊĠĠĠĠĠĠĠ Ġoptions . common Output Dir , ĊĠĠĠĠĠĠĠ Ġoptions . is Enable Caching ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Manager . getLog Manager (). read Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java . class Loader . getResource AsStream (" logging . properties ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( options . idl Sources . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOption Reader Exception (" input Ġoption Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlime Model : ĠL ime Model ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlime Model Ġ= Ġmodel Loader . load Model ( options . idl Sources , Ġoptions . aux iliary Id l Sources ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠL ime Model Loader Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Model ( lime Model )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Validation Ġerrors Ġfound , Ġsee Ġlog Ġfor Ġdetails .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( options . isValid ating Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTemplate Engine . init Copyright Header Contents ( options . copyright Header Contents ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Names Cache Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġvar Ġexecution Succeeded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Succeeded Ġ= Ġdiscover Generators (). all Ġ{ Ġexecute Generator ( it , Ġlime Model , Ġfile Names Cache ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcache Ġhas Ġto Ġbe Ġupdated Ġin Ġany Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Succeeded Ġ= Ġcache . write ( execution Succeeded ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexecution Succeeded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġexecute Generator ( ĊĠĠĠĠĠĠĠ Ġgenerator Name : ĠString , ĊĠĠĠĠĠĠĠ Ġlime Model : ĠL ime Model , ĊĠĠĠĠĠĠĠ Ġfile Names Cache : ĠMutable Map < String , ĠString > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLOGGER . fine (" Using Ġgenerator Ġ'$ generator Name '") ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠGenerator Suite . instantiate By ShortName ( generator Name , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġif Ġ( generator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Failed Ġinstantiation Ġof Ġgenerator Ġ'$ generator Name '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLOGGER . fine (" Instanti ated Ġgenerator Ġ'$ generator Name '") ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Files Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . generate ( lime Model ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠL ime Model Loader Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Successful Ġ= Ġoutput ( generator Name , Ġoutput Files ) ĊĠĠĠĠĠĠĠ Ġval Ġprocessed Without Coll isions Ġ= Ġcheck For FileName Coll isions ( file Names Cache , Ġoutput Files , Ġgenerator Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( generator Name Ġ== ĠJava Generator Suite . GENER ATOR _ NAME Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . android Merge Manifest Path Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Successful Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Without Coll isions ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Manifest Path Ġ= ĠPaths . get ( options . output Dir , Ġ" android ", Ġ" Android Manifest . xml "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmerge Android Manifest s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Manifest Path , Ġoptions . android Merge Manifest Path . toString (), Ġbase Manifest Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprocessed Without Coll isions Ġ&& Ġoutput Successful ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdiscover Generators (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgenerators Ġ= Ġoptions . generators ĊĠĠĠĠĠĠĠ Ġif Ġ( generators . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . fine (" Following Ġgenerators Ġwere Ġspecified Ġon Ġcommand Ġline : Ġ$ generators ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerators Ġ= ĠGenerator Suite . generator Short Names () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . fine (" No Ġgenerators Ġspecified , Ġusing Ġall Ġavailable Ġgenerators : Ġ$ generators ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerators ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġoutput ( generator Name : ĠString , Ġfiles : ĠList < Generated File >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles ToBe Written Ġ= Ġcache . update Cache ( generator Name , Ġfiles ) ĊĠĠĠĠĠĠĠ Ġval Ġmain Files Ġ= Ġfiles ToBe Written . filter Ġ{ Ġit . source Set Ġ== ĠGenerated File . Source Set . MAIN Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcommon Files Ġ= Ġfiles ToBe Written . filter Ġ{ Ġit . source Set Ġ== ĠGenerated File . Source Set . COMMON Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsave To Directory ( options . output Dir , Ġmain Files ) Ġ&& Ġsave To Directory ( options . common Output Dir , Ġcommon Files ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Model ( lime Model : ĠL ime Model ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlime Logger Ġ= ĠL ime Logger ( LOGGER , Ġlime Model . fileName Map ) ĊĠĠĠĠĠĠĠ Ġval Ġtype Refs Validation Result Ġ= ĠL ime Type Refs Validator ( lime Logger ). validate ( lime Model ) ĊĠĠĠĠĠĠĠ Ġval Ġvalidators Ġ= Ġget In dependent Validators ( lime Logger ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Refs Validation Result ) ĠgetType Ref Dependent Validators ( lime Logger ) Ġelse Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġvalidation Results Ġ= Ġvalidators . map Ġ{ Ġit . invoke ( lime Model ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Refs Validation Result Ġ&& Ġ! validation Results . contains ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetType Ref Dependent Validators ( lime Logger : ĠL ime Logger ) Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf <( L ime Model ) Ġ-> ĠBoolean >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Type Ref Target Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Generic Types Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Struct s Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Serializable Struct s Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Inheritance Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Functions Validator ( lime Logger ). validate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġget In dependent Validators ( lime Logger : ĠL ime Logger ) Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf <( L ime Model ) Ġ-> ĠBoolean >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Enumerator Refs Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime External Types Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Properties Validator ( lime Logger ). validate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime De prec ations Validator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlime Logger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . w error . contains ( Options . WARNING _ DEPRECATED _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). validate ( it . top Elements ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠL ime Functions Validator ( lime Logger ). validate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠOptions ( ĊĠĠĠĠĠĠĠ Ġvar Ġid l Sources : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġvar Ġauxiliary Id l Sources : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġvar Ġoutput Dir : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġcommon Output Dir : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġjava Packages : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġvar Ġjava Internal Packages : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġvar Ġjava Nullable Annotation : ĠPair < String , ĠList < String >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġjava NonNull Annotation : ĠPair < String , ĠList < String >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar ĠisValid ating Only : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġgenerators : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠĠĠĠĠ Ġvar Ġis Enable Caching : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġandroid Merge Manifest Path : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġcopyright Header Contents : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġcpp Internal Namespace : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġvar Ġcpp Root Namespace : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġvar Ġcpp Export : ĠString Ġ= ĠDEFAULT _ CPP _ EXPORT _ MACRO _ NAME , ĊĠĠĠĠĠĠĠ Ġvar Ġinternal Prefix : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġlibrary Name : ĠString Ġ= Ġ" library ", ĊĠĠĠĠĠĠĠ Ġvar Ġdart Lookup ErrorMessage : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġresolve Ġan ĠF FI Ġfunction . ĠPerhaps Ġ` Library Context . init ()` Ġwas Ġnot Ġcalled .", ĊĠĠĠĠĠĠĠ Ġvar Ġw error : ĠSet < String > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠ Ġvar Ġgenerate Stub s : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġcpp Name Rules : ĠConfiguration Ġ= ĠConfiguration Properties . from Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ nam er ules / cpp . properties " ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġvar Ġjava Name Rules : ĠConfiguration Ġ= ĠConfiguration Properties . from Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ nam er ules / java . properties " ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġvar Ġswift Name Rules : ĠConfiguration Ġ= ĠConfiguration Properties . from Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ nam er ules / swift . properties " ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġvar Ġdart Name Rules : ĠConfiguration Ġ= ĠConfiguration Properties . from Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ nam er ules / dart . properties " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠWARNING _ DOC _ LIN KS Ġ= Ġ" Doc Links " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠWARNING _ DEPRECATED _ ATTRIBUTES Ġ= Ġ" Deprecated Attributes " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠWARNING _ D ART _ OVERLOAD S Ġ= Ġ" Dart Over loads " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLogger . getLogger ( Gl ue co di um :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ INTERNAL _ NAMESPACE Ġ= ĠlistOf (" glue co di um ") ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ CPP _ EXPORT _ MACRO _ NAME Ġ= Ġ"_ GL UE CO DI UM _ CPP " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġtest Options () Ġ= ĠOptions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcpp Internal Namespace Ġ= ĠDEFAULT _ INTERNAL _ NAMESPACE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava NonNull Annotation Ġ= ĠPair (" NonNull ", ĠlistOf (" android ", Ġ" support ", Ġ" annotation ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Nullable Annotation Ġ= ĠPair (" Nullable ", ĠlistOf (" android ", Ġ" support ", Ġ" annotation ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġload Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Ġ= ĠProperties () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl ue co di um :: class . java . class Loader . getResource AsStream (" version . properties ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop . load ( stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Could Ġnot Ġload ĠGl ue co di um Ġversion Ġvalue : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprop . getProperty (" version ", Ġ" 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck For FileName Coll isions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Names Cache : ĠMutable Map < String , ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles : ĠList < Generated File >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator Name : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsucceeded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġfile . target File . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Entry Ġ= Ġfile Names Cache [ path ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Entry Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Names Cache [ path ] Ġ= Ġgenerator Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Generator Ġ'% s ' Ġis Ġover writing Ġfile Ġ% s Ġcreated Ġalready Ġby Ġ'% s ' Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator Name , Ġpath , Ġprevious Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsucceeded Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsucceeded ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġmerge Android Manifest s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Manifest Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Manifest Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput FilePath : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMer ger (). process ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- main ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Manifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- overlay s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Manifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- out ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput FilePath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Could Ġnot Ġmerge Ġbase ĠAndroid ĠManifest Ġfiles : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave To Directory ( output Dir : ĠString , Ġfiles : ĠList < Generated File >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Output ( File ( output Dir )). output ( files ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Cannot Ġopen Ġoutput Ġdirectory Ġ'$ output Dir ' Ġfor Ġwriting ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info (" Version : Ġ${ load Version () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠOption Reader . read ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options Ġ== Ġnull Ġ|| ĠGl ue co di um ( options ). execute ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠGl ue co di um ExecutionException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . log ( Level . SEVERE , Ġ" Running ĠGl ue co di um Ġfailed !", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOption Reader Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . se vere (" Failed Ġreading Ġoptions : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOption Reader . print Usage () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ