/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 Ġ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 . as Java . builder Ċ Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . progress . Process Canceled Exception Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . impl . compiled . Cls File Impl Ċ import Ġcom . intellij . psi . impl . java . stubs . Psi Java File Stub Ċ import Ġcom . intellij . psi . impl . java . stubs . impl . Psi Java File Stub Impl Ċ import Ġorg . jetbrains . kotlin . codegen . state . Generation State Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . config . language Version Settings Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . diagnostics . Diagnostics Ċ Ċ data Ġclass ĠLight Class Builder Result ( val Ġstub : ĠPsi Java File Stub , Ġval Ġbinding Context : ĠBinding Context , Ġval Ġdiagnostics : ĠDi agnostics ) Ċ Ċ fun Ġbuild Light Class ( ĊĠĠĠĠĠĠĠ Ġpackage Fq Name : ĠF q Name , ĊĠĠĠĠĠĠĠ Ġfiles : ĠCollection < Kt File >, ĊĠĠĠĠĠĠĠ Ġgenerate Class Filter : ĠGeneration State . Generate Class Filter , ĊĠĠĠĠĠĠĠ Ġcontext : ĠLight Class Construction Context , ĊĠĠĠĠĠĠĠ Ġgenerate : Ġ( state : ĠGeneration State , Ġfiles : ĠCollection < Kt File >) Ġ-> ĠUnit Ċ ): ĠLight Class Builder Result Ġ{ ĊĠĠĠ Ġval Ġproject Ġ= Ġfiles . first (). project ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass BuilderFactory Ġ= ĠKotlin Light Class BuilderFactory ( create Java File Stub ( package Fq Name , Ġfiles )) ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠGeneration State . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass BuilderFactory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . binding Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . language Version Settings ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompiler Configuration (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Version Settings Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ReadOnly Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠCompiler Configuration . EMPTY ĊĊĠĠĠĠĠĠĠ Ġ). generate Declared Class Filter ( generate Class Filter ). w ants Diagnostics ( false ). build () ĊĠĠĠĠĠĠĠ Ġstate . before Compile () ĊĊĠĠĠĠĠĠĠ Ġgenerate ( state , Ġfiles ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava File Stub Ġ= Ġclass BuilderFactory . result () ĊĊĠĠĠĠĠĠĠ Ġstub Computation Tracker Instance ( project )?. on Stub Computed ( java File Stub , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLight Class Builder Result ( java File Stub , Ġcontext . binding Context , Ġstate . collected Extra Jvm Diagnostics ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠProcess Canceled Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Error With OS Info ( e , Ġpackage Fq Name , Ġnull ) ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcreate Java File Stub ( package Fq Name : ĠF q Name , Ġfiles : ĠCollection < Kt File >): ĠPsi Java File Stub Ġ{ ĊĠĠĠ Ġval Ġjava File Stub Ġ= ĠPsi Java File Stub Impl ( package Fq Name . asString (), Ġ/* compiled Ġ= Ġ*/ true ) ĊĠĠĠ Ġjava File Stub . psi Factory Ġ= ĠC ls Wrapper Stub Psi Factory . INSTANCE ĊĊĠĠĠ Ġval Ġfake File Ġ= Ġobject Ġ: ĠC ls File Impl ( files . first (). view Provider ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Stub () Ġ= Ġjava File Stub ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget PackageName () Ġ= Ġpackage Fq Name . asString () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Physical () Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfiles . single OrNull ()?. text Ġ?: Ġsuper . getText () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġjava File Stub . psi Ġ= Ġfake File ĊĠĠĠ Ġreturn Ġjava File Stub Ċ } Ċ Ċ private Ġfun Ġlog Error With OS Info ( cause : ĠThrowable ?, Ġfq Name : ĠF q Name , Ġvirtual File : ĠVirtual File ?) Ġ{ ĊĠĠĠ Ġval Ġpath Ġ= Ġif Ġ( virtual File Ġ== Ġnull ) Ġ"< null >" Ġelse Ġvirtual File . path ĊĠĠĠ ĠLOG . error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġgenerate ĠLight Class Ġfor Ġ$ fq Name Ġdeclared Ġin Ġ$ path \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" System : Ġ${ System Info . OS _ NAME } Ġ${ System Info . OS _ VERSION } ĠJava ĠRuntime : Ġ${ System Info . JAVA _ RUNTIME _ VERSION }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcause ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġval ĠLOG Ġ= ĠLogger . getInstance ( Light Class Builder Result :: class . java )