package Ġcom . jetbrains . package search . intellij . plugin . extensions . gradle Ċ Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . external System . util . External System Api Util Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . module . Module Util Core Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . pom . Navig atable Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . util . Psi Util Ċ import Ġcom . jetbrains . package search . intellij . plugin . extensibility . Build System Type . GRAD LE _ GRO OV Y Ċ import Ġcom . jetbrains . package search . intellij . plugin . extensibility . Project Module Ċ import Ġcom . jetbrains . package search . intellij . plugin . extensibility . Project Module Provider Ċ import Ġcom . jetbrains . package search . intellij . plugin . ui . tool window . models . Package Version Ċ import Ġorg . jetbrains . plugins . gradle . model . External Project Ċ import Ġorg . jetbrains . plugins . gradle . service . project . data . External Project Data Cache Ċ import Ġorg . jetbrains . plugins . gradle . util . Gradle Constants Ċ Ċ private Ġval Ġlogger Ġby Ġlazy Ġ{ ĠLogger . getInstance ( Gradle Project Module Provider :: class . java ) Ġ} Ċ Ċ internal Ġopen Ġclass ĠGradle Project Module Provider Ġ: ĠProject Module Provider Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Dependency Element ( file : ĠPsi File , ĠgroupId : ĠString , Ġartifact Id : ĠString ): ĠPsi Element ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġfile . text . indexOf ( groupId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Util . getElement At Offset ( file , Ġindex ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . contains ( groupId ) Ġ&& Ġtext . contains ( artifactId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġfile . text . indexOf ( groupId , Ġindex Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobtain All Project Modules For ( project : ĠProject ): ĠSequence < Project Module > Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= Ġmutable ListOf < Project Module >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( module Ġin ĠModule Manager . getInstance ( project ). modules ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġour Module Ġ= Ġobtain Project Modules For ( project , Ġmodule ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= Ġour Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( our Module ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( our Module Ġin Ġmodules ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( getAll Sub modules ( our Module , Ġproject )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. distinct () ĊĊĠĠĠ Ġprivate Ġfun Ġobtain Project Modules For ( project : ĠProject , Ġmodule : ĠModule ): ĠProject Module ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexternal Root Project Ġ= Ġfind External Project ( project , Ġmodule ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbuild File Ġ= Ġexternal Root Project . build File Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbuild Virtual File Ġ= ĠLocal FileSystem . getInstance (). find File By Path ( build File . absolute Path ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġnative Module Ġ= ĠModule Util Core . find Module For File ( build Virtual File , Ġproject ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠProject Module ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexternal Root Project . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Module Ġ= Ġnative Module , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild File Ġ= Ġbuild Virtual File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild System Type Ġ= ĠGR AD LE _ GRO OV Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Type Ġ= ĠGradle Project Module Type ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Navig atable Dependency Ġ= Ġcreate Navig atable Dependency Callback ( project , Ġbuild Virtual File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Sub modules ( root Module : ĠProject Module , Ġproject : ĠProject ): ĠSequence < Project Module > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexternal Root Project Ġ= Ġfind External Project ( project , Ġroot Module . native Module ) Ġ?: Ġreturn Ġempty Sequence () ĊĊĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= Ġmutable ListOf ( root Module ) ĊĠĠĠĠĠĠĠ Ġexternal Root Project . add Children ToList Recursive ( modules , Ġroot Module , Ġproject ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmodules . as Sequence () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind External Project ( project : ĠProject , Ġmodule : ĠModule ): ĠExternal Project ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! External System Api Util . is External System Aware Module ( Gradle Constants . SYSTEM _ ID , Ġmodule )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Project Path Ġ= ĠExternal System Api Util . get External Root Project Path ( module ) ĊĠĠĠĠĠĠĠ Ġif Ġ( root Project Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Root Ġexternal Ġproject Ġwas Ġnot Ġyet Ġimported , Ġproject =${ project . project FilePath }, Ġmodule =${ module . module FilePath }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexternal Project Data Cache Ġ= ĠExternal Project Data Cache . getInstance ( project ) ĊĠĠĠĠĠĠĠ Ġval Ġexternal Project Ġ= Ġexternal Project Data Cache . getRoot External Project ( root Project Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( external Project Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" External Ġproject Ġis Ġnot Ġyet Ġcached , Ġproject =${ project . project FilePath }, Ġmodule =${ module . module FilePath }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġexternal Project ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠExternal Project . add Children ToList Recursive ( ĊĠĠĠĠĠĠĠ Ġmodules : ĠMutable List < Project Module >, ĊĠĠĠĠĠĠĠ Ġcurrent Module : ĠProject Module , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal FileSystem Ġ= ĠLocal FileSystem . getInstance () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( external Project Ġin Ġchild Projects . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Build File Ġ= Ġexternal Project . build File ?. absolute Path ?. let ( local FileSystem :: find File By Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Module Ġ= ĠModule Util Core . find Module For File ( project Build File , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Module Ġ= ĠProject Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexternal Project . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnative Module Ġ= Ġnative Module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġcurrent Module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild File Ġ= Ġproject Build File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild System Type Ġ= ĠGR AD LE _ GRO OV Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Type Ġ= ĠGradle Project Module Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Module . get Navig atable Dependency Ġ= Ġcreate Navig atable Dependency Callback ( project , Ġproject Build File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= Ġproject Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Project . add Children ToList Recursive ( modules , Ġproject Module , Ġproject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Navig atable Dependency Callback ( project : ĠProject , Ġfile : ĠVirtual File ) Ġ= ĊĠĠĠĠĠĠĠ Ġ{ ĠgroupId : ĠString , Ġartifact Id : ĠString , Ġ_: ĠPackage Version Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Manager . getInstance ( project ). find File ( file )?. let Ġ{ Ġpsi File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependency Element Ġ= Ġfind Dependency Element ( psi File , ĠgroupId , Ġartifact Id ) Ġ?: Ġreturn @ let Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġdependency Element Ġas ĠNavig atable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ