/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠU ber ĠTechnologies , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġmot if . intellij . hierarchy . graph Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġmot if . intellij . getClass Ċ import Ġmot if . intellij . validation . index . Scope Index Ċ Ċ class ĠGraph Processor ( private Ġval Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmap Ġof ĠScope Ġ-> ĠList Ġof ĠParent ĠS copes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscope To Parents Map (): ĠMap < Psi Class , ĠList < Psi Class >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscope Methods (). groupBy ({ Ġit . child ReturnType Ġ}) Ġ{ Ġit . scope Class Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmap Ġof ĠScope Ġ-> ĠList Ġof ĠChildren ĠS copes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscope To Children Map (): ĠMap < Psi Class , ĠList < Psi Class >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscope Methods (). groupBy ({ Ġit . scope Class Ġ}) Ġ{ Ġit . child ReturnType Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscope Methods (): ĠList < Scope Method > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscope Classes Ġ= ĠScope Index . getInstance (). get Scope Classes ( project ) ĊĠĠĠĠĠĠĠ Ġreturn Ġscope Classes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġscope Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope Class . methods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . returnType ?. getClass () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠScope Method ( scope Class , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . child ReturnType Ġin Ġscope Classes Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠScope Method ( val Ġscope Class : ĠPsi Class , Ġval Ġchild ReturnType : ĠPsi Class ) Ċ }