package Ġcom . yx hu ang . k sp comp lier Ċ Ċ import Ġcom . google . devtools . k sp . processing . Code Generator Ċ import Ġcom . google . devtools . k sp . processing . Dependencies Ċ import Ġcom . google . devtools . k sp . processing . K SP Logger Ċ import Ġcom . google . devtools . k sp . symbol . KS Class Declaration Ċ import Ġcom . google . devtools . k sp . symbol . KS Function Declaration Ċ import Ġcom . google . devtools . k sp . symbol . KS Visitor Void Ċ import Ġcom . google . devtools . k sp . symbol . Null ability Ċ import Ġjava . io . OutputStream Ċ import Ġjava . util . logging . Logger Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġy x hu ang Ċ Ġ* ĠDate : Ġ 2 0 2 1 / 7 / 2 4 Ċ Ġ* ĠDescription : Ċ Ġ* ĠĠĠ ĠBuilder Ġ æ³¨è§£ ĠVisitor Ċ Ġ*/ Ċ fun ĠOutputStream . append Text ( str : ĠString ) Ġ{ ĊĠĠĠ Ġthis . write ( str . toByteArray ()) Ċ } Ċ Ċ class ĠBuilder Annotation Visitor ( private Ġval Ġlogger : K SP Logger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcode Generator : ĠCode Generator ) Ġ: ĠK S Visitor Void () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Builder Annotation Visitor _" ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġvisit Class Declaration ( class Declaration : ĠK S Class Declaration , Ġdata : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( TAG Ġ+ Ġ" visit Class Declaration ") ĊĠĠĠĠĠĠĠ Ġclass Declaration . primary Constructor !!. accept ( this , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Function Declaration ( function : ĠK S Function Declaration , Ġdata : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( TAG Ġ+ Ġ" visit Function Declaration ") ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfunction . parent Declaration Ġas ĠK S Class Declaration ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġparent . containing File !!. packageName . asString () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ"${ parent . simple Name . asString ()} Builder " ĊĠĠĠĠĠĠĠ Ġlogger . info ( TAG Ġ+ Ġ" visit Function Declaration ĠpackageName Ġ" Ġ+ ĠpackageName Ġ+ Ġ" ĠclassName Ġ" Ġ+ ĠclassName ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º æĸ°çļĦ æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcode Generator . createNew File ( Dependencies ( true , Ġfunction . containing File !! ), ĠpackageName , ĠclassName ) ĊĊĠĠĠĠĠĠĠ Ġfile . append Text (" package Ġ$ packageName \ n \ n ") ĊĠĠĠĠĠĠĠ Ġfile . append Text (" class Ġ$ className {\ n ") ĊĠĠĠĠĠĠĠ Ġfunction . parameters . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . name !!. asString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= ĠStringBuilder ( it . type . resolve (). declaration . qualified Name ?. asString () Ġ?: Ġ"< ERROR >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Args Ġ= Ġit . type . element !!. type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type . element !!. type Arguments . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtypeName . append ("< ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtypeName . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Args . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġit . type ?. resolve () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . variance . label } Ġ${ type ?. declaration ?. qualified Name ?. asString () Ġ?: Ġ" ERROR "} " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type ?. null ability Ġ== ĠNull ability . NULL ABLE ) Ġ" ?" Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtypeName . append ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠ Ġprivate Ġvar Ġ$ name : Ġ$ typeName ? Ġ= Ġnull \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠ Ġinternal Ġfun Ġwith ${ name . capitalize ()} ($ name : Ġ$ typeName ): Ġ$ className Ġ{\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠĠĠĠĠ Ġthis .$ name Ġ= Ġ$ name \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠĠĠĠĠ Ġreturn Ġthis \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠ Ġ}\ n \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠ Ġinternal Ġfun Ġbuild (): Ġ${ parent . qualified Name !!. asString ()} Ġ{\ n ") ĊĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠĠĠĠĠ Ġreturn Ġ${ parent . qualified Name !!. asString ()} (" ) ĊĠĠĠĠĠĠĠ Ġfile . append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . parameters . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . name !!. asString ()} !! " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString (", Ġ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfile . append Text (" )\ n ") ĊĠĠĠĠĠĠĠ Ġfile . append Text (" ĠĠĠ Ġ}\ n ") ĊĠĠĠĠĠĠĠ Ġfile . append Text (" }\ n ") ĊĠĠĠĠĠĠĠ Ġfile . close () ĊĠĠĠ Ġ} Ċ Ċ }