/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 Ġ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 . quick fix . createFrom Usage . createClass Ċ Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġcom . intellij . code Insight . int ention . Int ention Action Ċ import Ġorg . jetbrains . kotlin . psi . Jet Simple Name Expression Ċ import Ġorg . jetbrains . kotlin . psi . Jet Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Non Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . psi . Jet Type Reference Ċ import Ġjava . util . Collections Ċ import Ġorg . jetbrains . kotlin . idea . quick fix . Jet Int ention Actions Factory Ċ import Ġorg . jetbrains . kotlin . psi . Jet Class Ċ import Ġorg . jetbrains . kotlin . psi . Jet Qualified Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Assignment By L HS Ċ import Ġorg . jetbrains . kotlin . psi . Jet Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Jet Import Directive Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Fully AndGet Result Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . get Call Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Qualified Element Selector Ċ import Ġorg . jetbrains . kotlin . idea . quick fix . createFrom Usage . callable Builder . TypeInfo Ċ import Ġorg . jetbrains . kotlin . psi . Jet Reference Expression Ċ import Ġjava . util . Arrays Ċ import Ġorg . jetbrains . kotlin . psi . Jet Dot Qualified Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Dot Receiver Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Element Ċ Ċ public Ġobject ĠCreate Class From Reference Expression Action Factory Ġ: ĠJet Int ention Actions Factory () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdo Create Actions ( diagnostic : ĠDiagnostic ): ĠList < Int ention Action > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġis Enum ( element : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Class Ġ-> Ġelement . is Enum () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Class Ġ-> Ġelement . is Enum () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġref Expr Ġ= Ġdiagnostic . get Psi Element () Ġas ? ĠJet Simple Name Expression Ġ?: Ġreturn ĠCollections . emptyList () ĊĠĠĠĠĠĠĠ Ġif Ġ( ref Expr . get Non Strict Parent OfType < Jet Type Reference >() Ġ!= Ġnull ) Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġref Expr . get Containing File () Ġas ? ĠJet File Ġ?: Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġref Expr . get Referenced Name () ĊĊĠĠĠĠĠĠĠ Ġval Ġ( context , Ġmodule Descriptor ) Ġ= Ġref Expr . analyze Fully AndGet Result () ĊĊĠĠĠĠĠĠĠ Ġval Ġfull Call Expr Ġ= Ġref Expr . getParent ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠJet Call Expression Ġ&& Ġit . get Cal lee Expression () Ġ== Ġref Expr Ġ-> Ġreturn ĠCollections . emptyList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠJet Qualified Expression Ġ&& Ġit . get Selector Expression () Ġ== Ġref Expr Ġ-> Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġref Expr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġas ? ĠJet Expression Ġ?: Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠ Ġval Ġin Import Ġ= Ġref Expr . get Non Strict Parent OfType < Jet Import Directive >() Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġqualifier Expected Ġ= Ġref Expr . is Dot Receiver () Ġ|| Ġ(( ref Expr . getParent () Ġas ? ĠJet Dot Qualified Expression )?. is Dot Receiver () Ġ?: Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( in Import Ġ|| Ġqualifier Expected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Selector Ġ= Ġ( full Call Expr Ġas ? ĠJet Qualified Expression )?. get Receiver Expression ()?. get Qualified Element Selector () Ġas ? ĠJet Reference Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Descriptor Ġ= Ġreceiver Selector ?. let Ġ{ Ġcontext [ Binding Context . REFERENCE _ TARGET , Ġit ] Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Parent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Target Parent By Qualifier ( ref Expr . get Containing Jet File (), Ġreceiver Selector Ġ!= Ġnull , Ġqualifier Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreate Package Action Ġ= Ġref Expr . get Create Package Fix If Applicable ( target Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( create Package Action Ġ!= Ġnull ) Ġreturn ĠCollections . singletonList ( create Package Action ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( name . check ClassName ()) ĠClass Kind . values () Ġelse Ġarray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . AN NOT ATION _ CLASS Ġ-> Ġin Import ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . ENUM _ ENTRY Ġ-> Ġin Import Ġ&& Ġis Enum ( target Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Info Ġ= ĠClass Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Parent Ġ= Ġtarget Parent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected TypeInfo Ġ= ĠType Info . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Class From Usage Fix ( ref Expr , Ġclass Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( full Call Expr . get Assignment By L HS () Ġ!= Ġnull ) Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġref Expr . get Call ( context ) Ġ?: Ġreturn ĠCollections . emptyList () ĊĠĠĠĠĠĠĠ Ġval Ġtarget Parent Ġ= Ġget Target Parent By Call ( call , Ġfile ) Ġ?: Ġreturn ĠCollections . emptyList () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Inner Class Expected ( call )) Ġreturn ĠCollections . emptyList () ĊĊĠĠĠĠĠĠĠ Ġval Ġ( expected TypeInfo , Ġfilter ) Ġ= Ġfull Call Expr . get Inherit able TypeInfo ( context , Ġmodule Descriptor , Ġtarget Parent ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrays . asList ( Class Kind . OBJECT , ĠClass Kind . ENUM _ ENTRY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ( it ) Ġ&& Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . OBJECT Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . ENUM _ ENTRY Ġ-> Ġis Enum ( target Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Info Ġ= ĠClass Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Parent Ġ= Ġtarget Parent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected TypeInfo Ġ= Ġexpected TypeInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Class From Usage Fix ( ref Expr , Ġclass Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ