package Ġdev . se b ast iano . code merge . collect ors Ċ Ċ import Ġdev . se b ast iano . code merge . cli . Logger Ċ import Ġjava . io . File Ċ import Ġorg . jetbrains . kotlin . cli . common . CLI Configuration Keys Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Message Collector Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Environment Config Files Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Kotlin Core Environment Ċ import Ġorg . jetbrains . kotlin . com . intellij . openapi . util . Dis poser Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi Manager Ċ import Ġorg . jetbrains . kotlin . com . intellij . test Framework . Light Virtual File Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin FileType Ċ import Ġorg . jetbrains . kotlin . psi . Kt Annotation Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . psi . Kt Value ArgumentList Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Call Name Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Private Ċ Ċ private Ġval Ġproject Ġby Ġlazy Ġ{ ĊĠĠĠ ĠKotlin Core Environment . create For Production ( ĊĠĠĠĠĠĠĠ ĠDis poser . new Disposable (), ĊĠĠĠĠĠĠĠ ĠCompiler Configuration (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI Configuration Keys . MESSAGE _ COLLECT OR _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Collector . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠEnvironment Config Files . JVM _ CONFIG _ FILES ĊĠĠĠ Ġ). project Ċ } Ċ Ċ fun Ġextract F qn From Kotlin Sources ( sources : ĠString , Ġfile : ĠFile , Ġlogger : ĠLogger ): ĠString ? Ġ{ ĊĠĠĠ Ġval ĠfileName Without Extension Ġ= Ġfile . name Without Extension ĊĠĠĠ Ġval Ġkt File Ġ= Ġcreate Kt File ( sources , Ġfile , Ġlogger ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġprimary Class Ġ= Ġkt File . declarations . filter Is Instance < Kt Class >() ĊĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . name Ġ== ĠfileName Without Extension Ġ&& Ġ! it . is Private () Ġ} ĊĠĠĠ Ġif Ġ( primary Class ?. fq Name Ġ!= Ġnull ) Ġreturn Ġprimary Class . fq Name !!. asString () ĊĊĠĠĠ Ġval Ġj vm Name Ġ= Ġkt File . file Annotation List ?. children ?. filter Is Instance ( Kt Annotation Entry :: class . java ) ĊĠĠĠĠĠĠĠ Ġ? . find Ġ{ Ġit . get Call Name Expression ()?. text Ġ== Ġ" Jvm Name " Ġ} ĊĠĠĠ Ġval Ġj vm Name Value Ġ= Ġj vm Name ?. children ?. first Ġ{ Ġit Ġis ĠK t Value ArgumentList Ġ} ĊĠĠĠĠĠĠĠ Ġ? . children ?. last ()?. text ?. trim ('" ') ĊĠĠĠ Ġval ĠclassName Ġ= Ġj vm Name Value Ġ?: Ġ"${ fileName Without Extension } Kt " ĊĊĠĠĠ Ġreturn Ġ"${ kt File . package Fq Name . asString ()}. $ className " Ċ } Ċ Ċ private Ġfun Ġcreate Kt File ( code String : ĠString , Ġfile : ĠFile , Ġlogger : ĠLogger ) Ġ= Ġtry Ġ{ ĊĠĠĠ ĠPsi Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠ Ġ. find File ( Light Virtual File ( file . name Without Extension , ĠKotlin FileType . INSTANCE , Ġcode String )) Ġas ĠK t File Ċ } Ġcatch Ġ( e : ĠClass CastException ) Ġ{ ĊĠĠĠ Ġlogger . v (" Unable Ġto Ġparse ĠKotlin Ġsources Ġfrom Ġfile Ġ$ file ") ĊĠĠĠ Ġnull Ċ } Ċ