package Ġcom . github . god moon light . moon style . actions Ċ Ċ import Ġcom . intellij . psi . Psi ArrayType Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Enum Constant Ċ import Ġcom . intellij . psi . Psi Primitive Type Ċ import Ġcom . intellij . psi . Psi Type Ċ import Ġcom . intellij . psi . util . Psi Types Util Ċ import Ġcom . intellij . psi . util . Psi Util Ċ import Ġorg . jetbrains . annotations . NotNull Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ import Ġjava . util . Date Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap Ċ Ċ class ĠField Resolver ( ĊĠĠĠ Ġprivate Ġvar Ġis Show Comment : ĠBoolean , ĊĠĠĠ Ġprivate Ġvar Ġis Random : ĠBoolean , ĊĠĠĠ Ġprivate Ġvar Ġenum values : ĠBoolean Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdf : ĠDate Format Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss ") ĊĊĠĠĠ Ġprivate Ġval Ġnormal Types : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĊĠĠĠ Ġprivate Ġfun Ġis Normal Type ( typeName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnormal Types . containsKey ( typeName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fields ( psi Class : ĠPsi Class ?): ĠK V < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkv : ĠK V < String , ĠAny > Ġ= ĠK V . create () ĊĠĠĠĠĠĠĠ Ġval Ġcomment KV : ĠK V < String , ĠAny > Ġ= ĠK V . create () ĊĠĠĠĠĠĠĠ Ġif Ġ( psi Class Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkv ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġpsi Class . all Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġfield . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdoc Ġcomment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . doc Comment Ġ!= Ġnull Ġ&& Ġfield . doc Comment !!. text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment KV [ name ] Ġ= Ġfield . doc Comment !!. text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprimitive ĠType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠPsi Primitive Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= ĠPsi Types Util . getDefault Value ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreference ĠType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield TypeName Ġ= Ġtype . present able Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Normal Type ( field TypeName ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnormal ĠType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= Ġnormal Types [ field TypeName ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġis ĠPsi ArrayType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarray Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= Ġprocess ArrayList ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield TypeName . startsWith (" List ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlist Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= Ġprocess List ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Util . resolve Class In ClassType Only ( type ) !!. is Enum Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġenum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= Ġprocess Enum ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclass _ type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkv [ name ] Ġ= Ġget Fields ( Psi Util . resolve Class In Type ( type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Comment Ġ&& Ġcomment KV . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkv [" @ comment "] Ġ= Ġcomment KV ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Enum ( type : Ġ@ NotNull ĠPsi Type ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Random Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Util . resolve Class In ClassType Only ( type ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fields . filter Is Instance < Psi Enum Constant >(). parallel Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Any (). get (). name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum values Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Util . resolve Class In ClassType Only ( type ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fields . filter Is Instance < Psi Enum Constant >(). map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess List ( type : Ġ@ NotNull ĠPsi Type ): ĠArrayList < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterable Type Ġ= ĠPsi Util . extract Iterable Type Parameter ( type , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġiterable Class Ġ= ĠPsi Util . resolve Class In ClassType Only ( iterable Type ) ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Any >() ĊĠĠĠĠĠĠĠ Ġval Ġclass TypeName Ġ= Ġiterable Class !!. name !! ĊĠĠĠĠĠĠĠ Ġif Ġ( is Normal Type ( class TypeName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Types [ class TypeName ]?. let Ġ{ Ġlist . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( get Fields ( iterable Class )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess ArrayList ( type : Ġ@ NotNull ĠPsi Type ): ĠArrayList < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeep Type Ġ= Ġtype . deep ComponentType ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Any >() ĊĠĠĠĠĠĠĠ Ġval Ġdeep TypeName Ġ= Ġdeep Type . present able Text ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeep Type Ġis ĠPsi Primitive Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Psi Types Util . getDefault Value ( deep Type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Normal Type ( deep TypeName ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Types [ deep TypeName ]?. let Ġ{ Ġlist . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( get Fields ( Psi Util . resolve Class In Type ( deep Type ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġnormal Types [" Boolean "] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnormal Types [" Byte "] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġnormal Types [" Short "] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġnormal Types [" Integer "] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġnormal Types [" Long "] Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġnormal Types [" Float "] Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġnormal Types [" Double "] Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġnormal Types [" String "] Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġnormal Types [" BigDecimal "] Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġnormal Types [" Date "] Ġ= Ġdf . format ( Date ()) ĊĠĠĠĠĠĠĠ Ġnormal Types [" Timestamp "] Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġnormal Types [" LocalDate "] Ġ= ĠLocalDate . now (). toString () ĊĠĠĠĠĠĠĠ Ġnormal Types [" Local Time "] Ġ= ĠLocal Time . now (). toString () ĊĠĠĠĠĠĠĠ Ġnormal Types [" LocalDateTime "] Ġ= ĠLocalDateTime . now (). toString () ĊĠĠĠ Ġ} Ċ } Ċ