/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 . Ġtang zx ( love . tang zx @ qq . com ) Ċ Ġ* Ċ Ġ* Ġ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 . tang . intellij . lua . unity . vfs Ċ Ċ import Ġat . poll ak net . api . fac ile . Fac ile Ċ import Ġat . poll ak net . api . fac ile . sy mt ab . symbols .* Ċ import Ġcom . intellij . openapi . vfs . impl . Archive Handler Ċ import Ġcom . tang . intellij . lua . refactor ing . Lua Ref actor ing Util Ċ Ċ private Ġval ĠType Ref . lua Type : ĠString Ġget () Ġ{ ĊĠĠĠ Ġval Ġns : ĠString ? Ġ= Ġnamespace ĊĠĠĠ Ġval Ġfull QName Ġ= Ġif Ġ( ns Ġ== Ġnull Ġ|| Ġns . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġname Ġ?: Ġ" any " ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ"$ ns .$ name " ĊĊĠĠĠ Ġval Ġconverted Ġ= Ġtype Convert Map [ full QName ] ĊĠĠĠ Ġreturn Ġconverted Ġ?: Ġfull QName Ċ } Ċ Ċ private Ġval ĠType Ref . is Void : ĠBoolean Ġget () Ġ{ ĊĠĠĠ Ġreturn Ġ" Void " Ġ== Ġname Ċ } Ċ Ċ private Ġval Ġobsolete Attr Set Ġ= Ġmutable Set Of ( ĊĠĠĠĠĠĠĠ Ġ" Obsolete Attribute ", ĊĠĠĠĠĠĠĠ Ġ" Mono NotSupported Attribute ", ĊĠĠĠĠĠĠĠ Ġ" Mono TODO Attribute " Ċ ) Ċ private Ġval Ġtype Convert Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" System . Single " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . Int 3 2 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . UInt 3 2 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . Double " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . Int 1 6 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . UInt 1 6 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . Int 6 4 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . UInt 6 4 " Ġto Ġ" number ", ĊĠĠĠĠĠĠĠ Ġ" System . Decimal " Ġto Ġ" number ", ĊĊĠĠĠĠĠĠĠ Ġ" System . Boolean " Ġto Ġ" boolean ", ĊĠĠĠĠĠĠĠ Ġ" System . String " Ġto Ġ" string ", ĊĠĠĠĠĠĠĠ Ġ" System . Object " Ġto Ġ" table " Ċ ) Ċ Ċ private Ġval ĠType Ref . isValid : ĠBoolean Ġget () Ġ{ ĊĠĠĠ Ġval Ġns Ġ= Ġnamespace . replace (".", Ġ"_ ") ĊĠĠĠ Ġif Ġ( ns . isNotEmpty () Ġ&& Ġ! Lua Ref actor ing Util . is Lua Identifier ( ns )) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ(! Lua Ref actor ing Util . is Lua Identifier ( ns )) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( name . startsWith ('< ')) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġfor Ġ( attribute Ġin Ġthis . custom Attributes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ob solete Attr Set . contains ( attribute . type Ref . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ private Ġval ĠMethod . is Public : ĠBoolean Ġget () Ġ= Ġthis . flags Ġand ĠMethod . FLAGS _ VIS IBILITY _ PUBLIC Ġ== ĠMethod . FLAGS _ VIS IBILITY _ PUBLIC Ċ Ċ private Ġval ĠMethod . is Static : ĠBoolean Ġget () Ġ= Ġthis . flags Ġand ĠMethod . FLAGS _ STATIC Ġ== ĠMethod . FLAGS _ STATIC Ċ Ċ private Ġval ĠMethod . isValid : ĠBoolean Ġget () Ġ{ ĊĠĠĠ Ġreturn Ġis Public ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠLua Ref actor ing Util . is Lua Identifier ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! is Property Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! is Event Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! name . startsWith (" op _ ") Ċ } Ċ Ċ private Ġval ĠProperty . is Public : ĠBoolean Ġget () Ġ{ ĊĠĠĠ Ġreturn Ġthis . methods . any Ġ{ Ġit . is Public Ġ} Ċ } Ċ Ċ private Ġval ĠField . is Public : ĠBoolean Ġget () Ġ= Ġthis . flags Ġand ĠField . FLAGS _ VIS IBILITY _ PUBLIC Ġ== ĠField . FLAGS _ VIS IBILITY _ PUBLIC Ċ Ċ class ĠNet Archive Handler ( path : ĠString ) Ġ: ĠArchive Handler ( path ) Ġ{ ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠType Data ( val Ġtype : ĠType , Ġval Ġcode : ĠByteArray ) ĊĊĠĠĠ Ġprivate Ġval Ġtype Map Ġ= Ġmutable Map Of < String , ĠType Data >() ĊĠĠĠ Ġprivate Ġval Ġns Map Ġ= Ġmutable Map Of < String , ĠByteArray >() ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Entries Map (): ĠMutable Map < String , ĠEntry Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Map . clear () ĊĠĠĠĠĠĠĠ Ġns Map . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠEntry Info >() ĊĠĠĠĠĠĠĠ Ġval Ġroot Entry Ġ= Ġcreate Root Entry () ĊĠĠĠĠĠĠĠ Ġmap . put ("", Ġroot Entry ) ĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠFac ile . load ( this . file . path ) ĊĠĠĠĠĠĠĠ Ġf . assembly . all Types . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġit . namespace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ns . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġns . split (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arr . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġqu a Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġarr . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu a Ġ= Ġif Ġ( i Ġ== Ġ 0 ) Ġarr [ 0 ] Ġelse Ġ"$ qua .${ arr [ i ]}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ns Map . containsKey ( qua )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ"$ qua Ġ= Ġ{}". toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ"$ qua . ns . lua " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Map [ fileName ] Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( fileName , ĠEntry Info ( fileName , Ġfalse , Ġcode . size . to Long (), ĠDEFAULT _ TIMESTAMP , Ġroot Entry )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġdecode ( it ). toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġif Ġ( ns . isNull OrEmpty ()) Ġ"${ it . name }. lua " Ġelse Ġ"$ ns .${ it . name }. lua " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠEntry Info ( fileName , Ġfalse , Ġcode . size . to Long (), ĠDEFAULT _ TIMESTAMP , Ġroot Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( fileName , Ġentry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Map . put ( fileName , ĠType Data ( it , Ġcode )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode ( type : ĠType ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield SB Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġbody SB Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġwith ( body SB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield SB . append (" --- Ġfields \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype . fields . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Public ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield SB . append (" ---@ field Ġpublic Ġ${ it . name } Ġ${ it . type Ref . lua Type }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield SB . append (" --- Ġproperties \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype . properties . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Public ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield SB . append (" ---@ field Ġpublic Ġ${ it . name } Ġ${ it . property Signature . type Ref . lua Type }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextends : ĠType Ref ? Ġ= Ġtype . extends ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extends Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ---@ class Ġ${ type . lua Type } Ġ: Ġ${ extends . lua Type }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ---@ class Ġ${ type . lua Type }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" local Ġm Ġ= Ġ{}\ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocessed Method Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype . methods . forEach Ġ{ Ġmethod Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . isValid Ġ&& Ġprocessed Method . add ( method . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġmethod . method Signature ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// over loads ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġover loads Ġ= Ġtype . methods . filter Ġ{ Ġit . name Ġ== ĠmethodName Ġ&& Ġit Ġ!= Ġmethod Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover loads . forEach Ġ{ Ġoverload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġoverload . method Signature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ---@ overload Ġfun (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpar Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig . parameters . forEach Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( par Index ++ Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ parameter . name }: Ġ${ parameter . type Ref . lua Type }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsig . returnType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . name Ġ!= Ġnull Ġ&& Ġ! ret . is Void ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (": ${ ret . lua Type }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// parameter Ġdocs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . parameters . forEach Ġ{ Ġpar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ---@ param Ġ${ par . name } Ġ${ par . type Ref . lua Type }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġsignature . returnType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . name Ġ!= Ġnull Ġ&& Ġ! ret . is Void ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ---@ return Ġ${ ret . lua Type }\ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// static Ġor Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . is Static ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" function Ġm .$ methodName (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" function Ġm :$ methodName (" ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpar Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . parameters . forEach Ġ{ Ġpar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( par Index ++ Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( par . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ) end \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnityEngine . GameObject Ġ= Ġm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġtype . namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ns . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ type . name } Ġ= Ġm \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("$ ns .${ type . name } Ġ= Ġm \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" return Ġm ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( field SB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( body SB ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontents To ByteArray ( relative Path : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġns Code Ġ= Ġns Map [ relative Path ] ĊĠĠĠĠĠĠĠ Ġif Ġ( ns Code Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġns Code ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Data Ġ= Ġtype Map [ relative Path ] ĊĠĠĠĠĠĠĠ Ġif Ġ( type Data Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Data . code ĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . ByteArray ( 0 ) ĊĠĠĠ Ġ} Ċ }