/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . android . synt hetic . codegen Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . android . parcel . is Parcel ize Ċ import Ġorg . jetbrains . kotlin . codegen . Abstract Class Builder Ċ import Ġorg . jetbrains . kotlin . codegen . Class Builder Ċ import Ġorg . jetbrains . kotlin . codegen . Class BuilderFactory Ċ import Ġorg . jetbrains . kotlin . codegen . Delegating Class Builder Ċ import Ġorg . jetbrains . kotlin . codegen . extensions . Class Builder Interceptor Extension Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Sink Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Or Object Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . diagnostics . Jvm Declaration Origin Ċ import Ġorg . jetbrains . org . object web . asm . Method Visitor Ċ import Ġorg . jetbrains . org . object web . asm . Op codes Ċ import Ġorg . jetbrains . org . object web . asm . Op codes . ACC _ STATIC Ċ import Ġorg . jetbrains . org . object web . asm . Record Component Visitor Ċ import Ġorg . jetbrains . org . object web . asm . Type Ċ import Ġorg . jetbrains . org . object web . asm . commons . Instruction Adapter Ċ Ċ class ĠParcel able Cl init Class Builder Interceptor Extension Ġ: ĠClass Builder Interceptor Extension Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġintercept Class BuilderFactory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintercept ed Factory : ĠClass BuilderFactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Context : ĠBinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics : ĠDiagnostic Sink ĊĠĠĠ Ġ): ĠClass BuilderFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠParcel able Cl init Class BuilderFactory ( intercept ed Factory , Ġbinding Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠParcel able Cl init Class BuilderFactory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdelegate Factory : ĠClass BuilderFactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context : ĠBinding Context ĊĠĠĠ Ġ) Ġ: ĠClass BuilderFactory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Class Builder ( origin : ĠJ vm Declaration Origin ): ĠClass Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAndroid On Destroy Collector Class Builder ( origin , Ġdelegate Factory . new Class Builder ( origin ), Ġbinding Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetClass Builder Mode () Ġ= Ġdelegate Factory . class Builder Mode ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġas Text ( builder : ĠClass Builder ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdelegate Factory . as Text (( builder Ġas ĠAndroid On Destroy Collector Class Builder ). delegate Class Builder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġas Bytes ( builder : ĠClass Builder ?): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdelegate Factory . as Bytes (( builder Ġas ĠAndroid On Destroy Collector Class Builder ). delegate Class Builder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Factory . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠAndroid On Destroy Collector Class Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration Origin : ĠJ vm Declaration Origin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval Ġdelegate Class Builder : ĠClass Builder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context : ĠBinding Context ĊĠĠĠ Ġ) Ġ: ĠDeleg ating Class Builder () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Class : ĠK t Class Or Object ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent ClassName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cl init Generated Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Delegate () Ġ= Ġdelegate Class Builder ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdefine Class ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin : ĠPsi Element ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterfaces : ĠArray < out ĠString > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( origin Ġis ĠK t Class Or Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Class Ġ= Ġorigin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Class Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ClassName Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cl init Generated Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . define Class ( origin , Ġversion , Ġaccess , Ġname , Ġsignature , Ġsuper Name , Ġinterfaces ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdone () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cl init Generated Ġ&& Ġcurrent Class Ġ!= Ġnull Ġ&& Ġcurrent ClassName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġbinding Context [ Binding Context . CLASS , Ġcurrent Class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor Ġ!= Ġnull Ġ&& Ġdeclaration Origin . descriptor Ġ== Ġdescriptor Ġ&& Ġdescriptor . is Parcel ize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Visitor Ġ= Ġsuper . new Method ( Jvm Declaration Origin . NO _ ORIGIN , ĠACC _ STATIC , Ġ"< cl init >", Ġ" () V ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= ĠCl init Aware Method Visitor ( current ClassName !! , Ġbase Visitor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Insn ( Op codes . RETURN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit End () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . done () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin : ĠJ vm Declaration Origin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexceptions : ĠArray < out ĠString >? ĊĠĠĠĠĠĠĠ Ġ): ĠMethod Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ"< cl init >" Ġ&& Ġcurrent Class Ġ!= Ġnull Ġ&& Ġcurrent ClassName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cl init Generated Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġbinding Context [ Binding Context . CLASS , Ġcurrent Class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor Ġ!= Ġnull Ġ&& Ġdeclaration Origin . descriptor Ġ== Ġdescriptor Ġ&& Ġdescriptor . is Parcel ize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCl init Aware Method Visitor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ClassName !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . new Method ( origin , Ġaccess , Ġname , Ġdesc , Ġsignature , Ġexceptions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . new Method ( origin , Ġaccess , Ġname , Ġdesc , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Record Component ( name : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?): ĠRecord Component Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAbstract Class Builder . EMPTY _ RECORD _ VIS ITOR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠCl init Aware Method Visitor ( val Ġparcel able Name : ĠString , Ġmv : ĠMethod Visitor ) Ġ: ĠMethod Visitor ( Op codes . API _ VERSION , Ġmv ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Insn ( opcode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . RETURN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠInstruction Adapter ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Name Ġ= Ġ"$ parcel able Name \$ Creator " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Type Ġ= ĠType . get ObjectType ( creator Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv . an ew ( creator Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv . dup () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv . inv okes pec ial ( creator Name , Ġ"< init >", Ġ" () V ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv . put static ( parcel able Name , Ġ" CRE ATOR ", Ġ" L android / os / Parcelable \$ Creator ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Insn ( opcode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ