package Ġua . val d _ zx . simp lex ml . k sp . processor Ċ Ċ import Ġcom . google . devtools . k sp . processing . K SP Logger Ċ import Ġcom . google . devtools . k sp . symbol .* Ċ import Ġua . val d _ zx . simp lex ml . k sp .* Ċ import Ġua . val d _ zx . simp lex ml . k sp . processor . Xml Symbol Processor . Companion . LIBRARY _ PACKAGE Ċ Ċ private Ġenum Ġclass ĠXml Unit Type Ġ{ ĊĠĠĠ ĠTEXT , ĊĠĠĠ ĠTAG , ĊĠĠĠ ĠLIST , ĊĠĠĠ ĠMAP , ĊĠĠĠ ĠATTRIBUT E , ĊĠĠĠ ĠUNKNOWN Ċ } Ċ Ċ class ĠAnnotation Info Reader ( ĊĠĠĠ Ġprivate Ġval Ġproperty : ĠK S Property Declaration , ĊĠĠĠ Ġprivate Ġval Ġparent : ĠK S Class Declaration , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠK SP Logger , ĊĠĠĠ Ġprivate Ġval Ġis Strict Mode : ĠBoolean , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠpropertyName Ġ= Ġproperty . simple Name . asString () ĊĠĠĠ Ġprivate Ġval Ġproperty Type Ġ= Ġproperty . type ĊĠĠĠ Ġprivate Ġval Ġparent Name Ġ= Ġparent . fullName ĊĠĠĠ Ġprivate Ġvar Ġpath Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġentry Name Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġkey Name Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġis Attribute Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġelement Name Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġrequired Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġis Inline Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġconverter Type : ĠK S Type ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġentry Type : ĠK S Type Reference ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġkey Type : ĠK S Type Reference ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġxml Unit Type : ĠXml Unit Type Ġ= ĠXml Unit Type . UNKNOWN ĊĊĠĠĠ Ġfun Ġread (): ĠField Ġ{ ĊĠĠĠĠĠĠĠ Ġproperty . annotations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . annotation Type . resolve (). declaration . packageName . asString () Ġ== ĠLIB R ARY _ PACKAGE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( annotation . short Name . asString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement :: class . simple Name Ġ-> Ġread Element ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute :: class . simple Name Ġ-> Ġread Attribute ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath :: class . simple Name Ġ-> Ġread Path ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText :: class . simple Name Ġ-> Ġread Text ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement List :: class . simple Name Ġ-> Ġread List ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠElement Map :: class . simple Name Ġ-> Ġread Map ( annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConvert :: class . simple Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġannotation . arguments . first (). value Ġas ĠK S Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Parameters Ġ= Ġparent . primary Constructor ?. parameters ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Parameter Ġ= Ġconstructor Parameters ?. find Ġ{ Ġit . name ?. asString () Ġ== ĠpropertyName Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis Variable Ġ= Ġproperty . is Mutable ĊĠĠĠĠĠĠĠ Ġval Ġis Nullable Ġ= Ġproperty . type . resolve (). null ability Ġ!= ĠNull ability . NOT _ NULL ĊĠĠĠĠĠĠĠ Ġval Ġis Mutable Collection Ġ= Ġproperty . type . is Mutable Collection () ĊĠĠĠĠĠĠĠ Ġval Ġis Constructor Parameter Ġ= Ġconstructor Parameter Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġhas DefaultValue Ġ= Ġconstructor Parameter ?. has Default Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġrequired To Constructor Ġ= Ġconstructor Parameter ?. has Default ?. not () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( required To Constructor Ġ&& Ġ! required Ġ&& Ġ! is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ("$ parent Name ::$ propertyName Ġis Ġnot Ġrequired Ġwithout Ġdefault Ġvalue ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( xml Unit Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . TAG Ġ-> ĠField . Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas DefaultValue Ġ= Ġhas DefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Ġ= Ġis Nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Ġ= Ġis Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor Parameter Ġ= Ġis Constructor Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġconverter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġrequired , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtagName Ġ= Ġelement Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldType Ġ= Ġproperty Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . ATTRIBUTE Ġ-> ĠField . Attribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas DefaultValue Ġ= Ġhas DefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Ġ= Ġis Nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Ġ= Ġis Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor Parameter Ġ= Ġis Constructor Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġconverter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġrequired , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Name Ġ= Ġelement Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldType Ġ= Ġproperty Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . TEXT Ġ-> ĠField . Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas DefaultValue Ġ= Ġhas DefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Ġ= Ġis Nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Ġ= Ġis Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor Parameter Ġ= Ġis Constructor Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġconverter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġrequired , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldType Ġ= Ġproperty Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . LIST Ġ-> ĠField . List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas DefaultValue Ġ= Ġhas DefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Ġ= Ġis Nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Ġ= Ġis Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor Parameter Ġ= Ġis Constructor Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldType Ġ= Ġproperty Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġconverter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġrequired , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtagName Ġ= Ġelement Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inline Ġ= Ġis Inline , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Collection Ġ= Ġis Mutable Collection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġentry Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Type Ġ= Ġentry Type !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . MAP Ġ-> ĠField . Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas DefaultValue Ġ= Ġhas DefaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Ġ= Ġis Nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Ġ= Ġis Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor Parameter Ġ= Ġis Constructor Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldType Ġ= Ġproperty Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Type Ġ= Ġconverter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġrequired , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtagName Ġ= Ġelement Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Attribute Key Ġ= Ġis Attribute , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inline Ġ= Ġis Inline , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mutable Collection Ġ= Ġis Mutable Collection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Name Ġ= Ġkey Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Type Ġ= Ġkey Type !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġentry Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Type Ġ= Ġentry Type !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXml Unit Type . UNKNOWN Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK S Type Reference . is Mutable Collection (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Simple Name Ġ= Ġresolve (). declaration . simple Name . asString () ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Simple Name Ġ== Ġ" Mutable List " Ġ|| Ġtype Simple Name Ġ== Ġ" Mutable Map " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Data Unit ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type () ĊĠĠĠĠĠĠĠ Ġannotation . arguments . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg . name ?. get ShortName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name Ġ= Ġarg . value . asString ( default Ġ= ĠpropertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" required " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġarg . value . as Boolean ( default Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Element ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġread Data Unit ( annotation ) ĊĠĠĠĠĠĠĠ Ġxml Unit Type Ġ= ĠXml Unit Type . TAG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Attribute ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġread Data Unit ( annotation ) ĊĠĠĠĠĠĠĠ Ġxml Unit Type Ġ= ĠXml Unit Type . ATTRIBUTE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Text ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type () ĊĠĠĠĠĠĠĠ Ġannotation . arguments . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg . name ?. get ShortName () Ġ== Ġ" required ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġarg . value . as Boolean ( default Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġxml Unit Type Ġ= ĠXml Unit Type . TEXT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread List ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type () ĊĠĠĠĠĠĠĠ Ġannotation . arguments . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg . name ?. get ShortName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name Ġ= Ġarg . value . asString ( default Ġ= ĠpropertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entry " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġarg . value . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" required " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġarg . value . as Boolean ( default Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" inline " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inline Ġ= Ġarg . value . as Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( entry Name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġproperty Type . get Argument ShortName ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġxml Unit Type Ġ= ĠXml Unit Type . LIST ĊĠĠĠĠĠĠĠ Ġentry Type Ġ= Ġproperty Type . element ?. type Arguments ?. first ()?. type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Map ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Type () ĊĠĠĠĠĠĠĠ Ġannotation . arguments . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg . name ?. get ShortName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name Ġ= Ġarg . value . asString ( default Ġ= ĠpropertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Name Ġ= Ġarg . value . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" entry " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġarg . value . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Attribute Ġ= Ġarg . value . as Boolean ( default Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" required " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġarg . value . as Boolean ( default Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" inline " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inline Ġ= Ġarg . value . as Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( key Name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Name Ġ= Ġproperty Type . get Argument ShortName ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( entry Name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Name Ġ= Ġproperty Type . get Argument ShortName ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġxml Unit Type Ġ= ĠXml Unit Type . MAP ĊĠĠĠĠĠĠĠ Ġkey Type Ġ= Ġproperty Type . element ?. type Arguments ?. get ( 0 )?. type ĊĠĠĠĠĠĠĠ Ġentry Type Ġ= Ġproperty Type . element ?. type Arguments ?. get ( 1 )?. type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( xml Unit Type Ġ!= ĠXml Unit Type . UNKNOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Strict Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ("$ parent Name Ġfailure . ĠIllegal Ġannotation Ġon Ġ$ propertyName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Too Ġmany Ġannotations . Ġ$ parent Name ::$ propertyName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Path ( annotation : ĠK S Annotation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġannotation . arguments . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg . name ?. get ShortName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġarg . value . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ parent Name ::$ propertyName Ġfailure . ĠPath Ġis Ġempty , Ġremove Ġ@ Path Ġor Ġfill ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Strict Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Path Ġis Ġignored . Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAny ?. asString ( default : ĠString Ġ= Ġ"") : ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this Ġis ĠString Ġ&& Ġthis . isNotEmpty ()) Ġthis Ġelse Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAny ?. as Boolean ( default : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( this Ġas ĠBoolean ?) Ġ?: Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK S Type Reference . get Argument ShortName ( index : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ShortName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror ("${ parent Name }:${ propertyName } Invalid Ġcollection ") ĊĠĠĠ Ġ} Ċ } Ċ