package Ġcom . step an ov . bbf . bug finder . mut ator . transform ations . abi . g structures Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . step an ov . bbf . bug finder . mut ator . transform ations . Factory Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Or Object Ċ import Ġorg . jetbrains . kotlin . psi . Kt Object Declaration Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Private Ċ Ċ data Ġclass ĠG Class ( ĊĠĠĠ Ġvar Ġannotations : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠ Ġvar Ġimports : ĠMutable List < String > Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġoverride Ġvar Ġmodifiers : ĠMutable List < String > Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġvar Ġclass Word : ĠString Ġ= Ġ"", ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"", ĊĠĠĠ Ġvar Ġtype Params : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠ Ġvar Ġconstructor Word : ĠString Ġ= Ġ"", ĊĠĠĠ Ġvar Ġconstructor Args : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠ Ġvar Ġsup ert ypes : ĠList < String > Ġ= ĠlistOf (), ĊĠĠĠ Ġvar Ġbody : ĠString Ġ= Ġ"" Ċ ): ĠG Structure () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġannotations . join ToString ("\ n ", Ġpostfix Ġ= Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmodifiers . let Ġ{ Ġif Ġ( it . all Ġ{ Ġit . isEmpty () Ġ}) Ġ"" Ġelse Ġit . join ToString (" Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constructor Args . isEmpty ()) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġconstructor Args . join ToString ( prefix Ġ= Ġ" (", Ġpostfix Ġ= Ġ") ") ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Params . isEmpty ()) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtype Params . join ToString ( prefix Ġ= Ġ"< ", Ġpostfix Ġ= Ġ"> Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sup ert ypes . isEmpty ()) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġsup ert ypes . join ToString ( prefix Ġ= Ġ": Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . isEmpty ()) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠFactory . psi Factory . create Block ( body ). text ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ a $ m Ġ$ class Word Ġ$ name Ġ$ g Ġ$ constructor Word $ c $ i $ b " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Psi ( klass : ĠK t Class Or Object ): ĠG Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Class Ġ= ĠG Class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . class Word Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( klass Ġis ĠK t Object Declaration ) Ġ" object " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( klass Ġis ĠK t Class Ġ&& Ġklass . is Interface ()) Ġ" interface " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" class " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . name Ġ= Ġklass . name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . annotations Ġ= Ġklass . annotations . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) ĠlistOf () Ġelse Ġit . map Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . modifiers Ġ= Ġklass . modifier List ?. text ?. split (" Ġ") ?. to Mutable List () Ġ?: Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . type Params Ġ= Ġklass . type Parameters . let Ġ{ Ġif Ġ( it . isEmpty ()) ĠlistOf () Ġelse Ġit . map Ġ{ Ġit . text Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . constructor Word Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass . primary Constructor ?. let Ġ{ Ġif Ġ( it . is Private ()) Ġ" private Ġconstructor " Ġelse Ġ"" Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . constructor Args Ġ= Ġklass . primary Constructor ?. value Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġif Ġ( it . isEmpty ()) ĠlistOf () Ġelse Ġit . map Ġ{ Ġit . text Ġ} Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . sup ert ypes Ġ= Ġklass . super TypeList Entries . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) ĠlistOf () Ġelse Ġit . map Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Class . body Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass . body Ġ== Ġnull Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass . body !!. text . trim (). startsWith ("{ ") Ġ-> Ġklass . body !!. text . substring After ('{ '). substring Before Last (' }') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġklass . body !!. text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġg Class ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Psi (): ĠPsi Element ? Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isObject ()) ĠFactory . psi Factory . createObject ( toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠFactory . psi Factory . createClass ( toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Object () Ġ= Ġclass Word Ġ== Ġ" object " ĊĠĠĠ Ġfun Ġis Fun Interface () Ġ= Ġis Interface () Ġ&& Ġmodifiers . contains (" fun ") ĊĠĠĠ Ġfun Ġis Inner () Ġ= Ġmodifiers . contains (" inner ") ĊĠĠĠ Ġfun Ġis Annotation () Ġ= Ġmodifiers . contains (" annotation ") ĊĠĠĠ Ġfun Ġis Enum () Ġ= Ġmodifiers . contains (" enum ") ĊĠĠĠ Ġfun Ġis Data () Ġ= Ġmodifiers . contains (" data ") ĊĠĠĠ Ġfun Ġis Interface () Ġ= Ġclass Word Ġ== Ġ" interface " ĊĠĠĠ Ġfun Ġis Se aled () Ġ= Ġmodifiers . contains (" sealed ") ĊĠĠĠ Ġfun Ġhas Private Constructor () Ġ= Ġconstructor Word . contains (" private ") Ċ }