/* Ċ Ġ* Ġ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 . refactor ing . member Info Ċ Ċ import Ġcom . intellij . refactor ing . class Members . Abstract Member Info Storage Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind Ċ import Ġorg . jetbrains . kotlin . descriptors . Function Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Property Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . Descriptor To Source Utils Ide Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Over load Util Ċ import Ġorg . jetbrains . kotlin . resolve . source . get Psi Ċ import Ġorg . jetbrains . kotlin . types . type Util . immediate Sup ert ypes Ċ import Ġjava . util . ArrayList Ċ Ċ public Ġclass ĠKotlin Member Info Storage ( ĊĠĠĠĠĠĠĠ Ġclass Or Object : ĠJet Class Or Object , ĊĠĠĠĠĠĠĠ Ġfilter : Ġ( Jet Named Declaration ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ} Ċ ): ĠAbstract Member Info Storage < Jet Named Declaration , ĠJet Class Or Object , ĠKotlin Member Info >( class Or Object , Ġfilter ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmember Conflict ( member 1 : ĠJet Named Declaration , Ġmember : ĠJet Named Declaration ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor 1 Ġ= Ġmember 1 . resolve To Descriptor () ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġmember . resolve To Descriptor () ĊĠĠĠĠĠĠĠ Ġif Ġ( descriptor 1 . getName () Ġ!= Ġdescriptor . getName ()) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor 1 Ġis ĠFunction Descriptor Ġ&& Ġdescriptor Ġis ĠFunction Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Over load Util . is Over load able ( descriptor 1 , Ġdescriptor ). is Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor 1 Ġis ĠProperty Descriptor Ġ&& Ġdescriptor Ġis ĠProperty Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor 1 Ġis ĠClass Descriptor Ġ&& Ġdescriptor Ġis ĠClass Descriptor Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Sub Classes Map ( aClass : ĠJet Class Or Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġa Class . resolve To Descriptor () Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠ Ġval Ġclass Type Ġ= Ġclass Descriptor . getDefault Type () ĊĠĠĠĠĠĠĠ Ġfor Ġ( sup ertype Ġin Ġclass Type . immediate Sup ert ypes ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠsuperClass Ġ= Ġsup ertype . get Constructor (). get Declaration Descriptor ()?. getSource ()?. get Psi () Ġas ? ĠJet Class Or Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Sub classes ( super Class ). add ( aClass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Sub Classes Map ( super Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisIn her itor ( base Class : ĠJet Class Or Object , Ġa Class : ĠJet Class Or Object ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Descriptor Ġ= Ġbase Class . resolve To Descriptor () Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Descriptor Ġ= Ġa Class . resolve To Descriptor () Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠ Ġreturn ĠDescriptor Utils . is Subclass ( current Descriptor , Ġbase Descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġextract Class Members ( aClass : ĠJet Class Or Object , Ġtemp : ĠArrayList < Kotlin Member Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġa Class . analyze () ĊĠĠĠĠĠĠĠ Ġa Class . get Declarations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġis ĠJet Named Declaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit Ġ! is ĠJet Constructor < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ!( it Ġis ĠJet Object Declaration Ġ&& Ġit . is Companion ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmy Filter . include Member ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( temp ) Ġ{ ĠKotlin Member Info ( it Ġas ĠJet Named Declaration ) Ġ} ĊĠĠĠĠĠĠĠ Ġa Class . get Deleg ation Spec ifiers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Jet Deleg ator To Super Class >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġcontext [ Binding Context . TYPE , Ġit . getType Reference ()] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġtype ?. get Constructor ()?. get Declaration Descriptor () Ġas ? ĠClass Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Descriptor ?. getSource ()?. get Psi () Ġas ? ĠJet Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġit . is Interface () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( temp ) Ġ{ ĠKotlin Member Info ( it !! , Ġtrue ) Ġ} ĊĠĠĠ Ġ} Ċ }