/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . idea . completion . test Ċ Ċ import Ġcom . intellij . openapi . components . Component Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . impl . java . stubs . Psi Class Stub Ċ import Ġcom . intellij . psi . impl . java . stubs . Psi Java File Stub Ċ import Ġorg . jetbrains . kotlin . as Java . builder . Light Class Construction Context Ċ import Ġorg . jetbrains . kotlin . as Java . builder . Stub Computation Tracker Ċ import Ġorg . jetbrains . kotlin . test . In Text Directives Utils Ċ import Ġorg . junit . Assert Ċ import Ġorg . pic oc ont ainer . Mutable P ico Container Ċ import Ġjava . util .* Ċ Ċ object ĠLight Class Computation Control Ġ{ ĊĠĠĠ Ġfun Ġtest With Control ( project : ĠProject , Ġtest Text : ĠString , Ġtest Body : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Light Class Fq Names Ġ= ĠIn Text Directives Utils . find Lines With Prefixes Removed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Text , Ġ"// Ġ$ LIGHT _ CLASS _ DIRECT IVE " ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġit . trim () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Fq Names Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġstub Computation Tracker Ġ= Ġobject Ġ: ĠStub Computation Tracker Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stub Computed ( java File Stub : ĠPsi Java File Stub , Ġcontext : ĠLight Class Construction Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualified Name Ġ= Ġ( java File Stub . children Stub s . single () Ġas ĠPsi Class Stub < *> ). qualified Name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Fq Names . add ( qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . with Service Registered < Stub Computation Tracker , ĠUnit >( stub Computation Tracker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Body () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( expected Light Class Fq Names . to Sorted Set () Ġ!= Ġactual Fq Names . to Sorted Set ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġto Ġcompute : Ġ${ expected Light Class Fq Names . pretty ToString () }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Act ually Ġcomputed : Ġ${ actual Fq Names . pretty ToString () }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Use Ġ$ LIGHT _ CLASS _ DIRECT IVE Ġto Ġspecify Ġexpected Ġlight Ġclass Ġcomput ations " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠLIGHT _ CLASS _ DIRECT IVE Ġ= Ġ" LIGHT _ CLASS :" ĊĊĠĠĠ Ġprivate Ġfun ĠList < String >. pretty ToString () Ġ= Ġif Ġ( isEmpty ()) Ġ"< empty >" Ġelse Ġjoin ToString () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny , ĠR > ĠComponent Manager . with Service Registered ( instance : ĠT , Ġbody : Ġ() Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġval Ġp ico Container Ġ= Ġp ico Container Ġas ĠMutable P ico Container ĊĠĠĠ Ġval Ġkey Ġ= ĠT :: class . java . name ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġp ico Container . unregister Component ( key ) ĊĠĠĠĠĠĠĠ Ġp ico Container . register Component Instance ( key , Ġinstance ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbody () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġp ico Container . unregister Component ( key ) ĊĠĠĠ Ġ} Ċ } Ċ