/* Ċ Ġ* ĠMinecraft ĠDev Ġfor ĠIntelliJ Ċ Ġ* Ċ Ġ* Ġhttps :// minecraft dev . org Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġm inecraft - dev Ċ Ġ* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . de mon wav . mc dev . platform . m cp . gradle Ċ Ċ import Ġcom . de mon wav . mc dev . platform . m cp . gradle . data handler . M cp Model FG 2 Handler Ċ import Ġcom . de mon wav . mc dev . platform . m cp . gradle . data handler . M cp Model FG 3 Handler Ċ import Ġcom . de mon wav . mc dev . platform . m cp . gradle . tool ing . M cp Model FG 2 Ċ import Ġcom . de mon wav . mc dev . platform . m cp . gradle . tool ing . M cp Model FG 3 Ċ import Ġcom . de mon wav . mc dev . util . run Gradle Task Ċ import Ġcom . intellij . openapi . external System . model . DataNode Ċ import Ġcom . intellij . openapi . external System . model . project . Module Data Ċ import Ġcom . intellij . openapi . external System . model . project . Project Data Ċ import Ġjava . nio . file . Paths Ċ import Ġorg . gradle . tool ing . model . idea . Ide a Module Ċ import Ġorg . jetbrains . plugins . gradle . service . project . Abstract Project Resolver Extension Ċ Ċ class ĠM cp Project Resolver Extension Ġ: ĠAbstract Project Resolver Extension () Ġ{ ĊĊĠĠĠ Ġ// ĠRegister Ġour Ġcustom ĠGradle Ġtool ing ĠAPI Ġmodel Ġin ĠIntelliJ 's Ġproject Ġresolver ĊĠĠĠ Ġoverride Ġfun Ġget Extra Project Model Classes (): ĠSet < Class < out ĠAny >> Ġ= ĊĠĠĠĠĠĠĠ Ġset Of ( M cp Model FG 2 :: class . java , ĠM cp Model FG 3 :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Tool ing Extensions Classes () Ġ= Ġextra Project Model Classes ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Finished ( project DataNode : ĠData Node < Project Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠF G 3 Ġrequires Ġus Ġto Ġrun Ġa Ġtask Ġfor Ġeach Ġmodule ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġdo Ġit Ġhere Ġso Ġthat Ġwe Ġcan Ġdo Ġthis Ġone Ġtime Ġfor Ġall Ġmodules ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġdo Ġneed Ġto Ġhave Ġa Ġproject Ġhere Ġthough ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġresolver Ctx . external System TaskId . find Project () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġall Task Names Ġ= ĠfindAll Task Names ( project DataNode ) ĊĠĠĠĠĠĠĠ Ġif Ġ( all Task Names . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSeems Ġto Ġnot Ġbe ĠF G 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproject DirPath Ġ= ĠPaths . get ( project DataNode . data . linked External Project Path ) ĊĠĠĠĠĠĠĠ Ġrun Gradle Task ( project , Ġproject DirPath ) Ġ{ Ġsettings Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . task Names Ġ= Ġall Task Names ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . resolve Finished ( project DataNode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠfindAll Task Names ( node : ĠData Node < *> ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠfindAll Task Names ( node : ĠData Node <* >, Ġtask Names : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġnode . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġis ĠM cp Model Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . task Name ?. let Ġ{ Ġtask Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Names Ġ+= Ġtask Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġnode . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindAll Task Names ( child , Ġtask Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ ĠfindAll Task Names ( node , Ġres ) ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopulate Module Extra Models ( gradle Module : ĠIde a Module , Ġide Module : ĠData Node < Module Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin Ġhandlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . build ( gradle Module , Ġide Module , Ġresolver Ctx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠProcess Ġthe Ġother Ġresolver Ġextensions ĊĠĠĠĠĠĠĠ Ġsuper . populate Module Extra Models ( gradle Module , Ġide Module ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhandlers Ġ= ĠlistOf ( M cp Model FG 2 Handler , ĠM cp Model FG 3 Handler ) ĊĠĠĠ Ġ} Ċ } Ċ