package Ġcom . jetbrains . r ider . plugins . unity . explorer Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . workspace Model . ide . Workspace Model Ċ import Ġcom . jetbrains . rd . util . assert Ċ import Ġcom . jetbrains . r ider . plugins . unity . is Unity Project Ċ import Ġcom . jetbrains . r ider . project View . Project Element View Ċ import Ġcom . jetbrains . r ider . project View . Project Entity View Ċ import Ġcom . jetbrains . r ider . project View . Project Model View Extensions Ċ import Ġcom . jetbrains . r ider . project View . workspace .* Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ class ĠUnity Project Model View Extensions ( project : ĠProject ) Ġ: ĠProject Model View Extensions ( project ) Ġ{ ĊĊĠĠĠ Ġ// Ġthis Ġis Ġcalled Ġfor Ġrename , Ġwe Ġshould Ġfilter Ġ. Player Ġprojects Ġand Ġreturn Ġnode Ġitself ĊĠĠĠ Ġoverride Ġfun Ġget Best Project Model Element ( target Location : ĠVirtual File ): ĠProject Element View ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! project . is Unity Project ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġworkspace Model Ġ= ĠWorkspace Model . getInstance ( project ) ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġfilter Out Items From Non Primary Projects ( workspace Model . getProject Model Entities ( target Location , Ġproject ). toList ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( items . count () Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProject Entity View ( project , Ġitems . single ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġi . sh ak h ov Ġhandle Ġrename Ġcase , Ġwhen Ġfolder Ġbelongs Ġto Ġmultiple Ġprojects Ġlike Ġin ĠRID ER - 6 9 0 5 3 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Best Parent Project Model Node ( target Location : ĠVirtual File ): ĠProject Model Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! project . is Unity Project ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( target Location . isDirectory ) Ġ// ĠRID ER - 6 4 4 2 7 Ġ" New Ġin ĠThis ĠDirectory " Ġdoesn 't Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrecursive Search ( target Location ) Ġ?: Ġsuper . get Best Parent Project Model Node ( target Location ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrecursive Search ( target Location . parent ) Ġ?: Ġsuper . get Best Parent Project Model Node ( target Location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter Project Model Nodes Before Operation ( entities : ĠList < Project Model Entity >): ĠList < Project Model Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! project . is Unity Project ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentities ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Out Items From Non Primary Projects ( entities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecursive Search ( target Location : ĠVirtual File ?): ĠProject Model Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( target Location Ġ== Ġnull ) Ġ// Ġmay Ġhappen Ġfor Ġpackages Ġoutside Ġof Ġsolution Ġfolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġfilter Out Items From Non Primary Projects ( Workspace Model . getInstance ( project ). getProject Model Entities ( target Location , Ġproject )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġto Ġstop Ġgoing Ġup ĊĠĠĠĠĠĠĠ Ġif Ġ( items . any Ġ{ Ġit . is Solution Folder () Ġ|| Ġit . is Solution () Ġ}) Ġ// Ġdon 't Ġforget Ġto Ġcheck ĠFile ĠSystem ĠExplorer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġassert ( items . all Ġ{ Ġit . is Project Folder () Ġ}) Ġ{ Ġ" Only ĠProject Folders Ġare Ġexpected ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġone Ġof Ġthe Ġpredefined Ġprojects ĊĠĠĠĠĠĠĠ Ġif Ġ( items . count () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpredefined Ġprojects Ġin Ġthe Ġfollowing Ġorder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpredefined Project Names Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnity Explorer . Default Project Prefix , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnity Explorer . Default Project Prefix Ġ+ Ġ"- first pass ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnity Explorer . Default Project Prefix Ġ+ Ġ"- Editor ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnity Explorer . Default Project Prefix Ġ+ Ġ"- Editor - first pass " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin Ġpredefined Project Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . containing Project Entity ()?. name . equals ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġare Ġin Ġa Ġfolder , Ġwhich Ġcontains Ġscripts Ġ- Ġchoose Ġsame Ġnode Ġas Ġscripts ĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= Ġitems . filter Ġ{ Ġnode Ġ-> Ġnode . children Entities . any Ġ{ Ġit . is Project File () Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( candidates . count () Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcandidates . single () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrecursive Search ( target Location . parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġfilter Ġout Ġduplicate Ġitems Ġin ĠPlayer Ġprojects ĊĠĠĠ Ġ// Ġtodo : Ġcase Ġwith Ġmain Ġproject Ġnamed Ġ. Player Ġis Ġalso Ġpossible ĊĠĠĠ Ġprivate Ġfun Ġfilter Out Items From Non Primary Projects ( items : ĠList < Project Model Entity >): ĠList < Project Model Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelements Without Project Ġ= Ġitems . filter Ġ{ Ġit . containing Project Entity () Ġ== Ġnull Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġval Ġelements With Project Ġ= Ġitems . filter Ġ{ Ġit . containing Project Entity () Ġ!= Ġnull Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġval Ġelements With Non Player Project Ġ= Ġelements With Project . filter Ġ{ Ġ! it . containing Project Entity () !!. name . endsWith (". Player ") Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġval Ġelements With Player Project Ġ= Ġelements With Project . filter Ġ{ Ġit . containing Project Entity () !!. name . endsWith (". Player ") Ġ}. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Project Model Entity >() ĊĠĠĠĠĠĠĠ Ġres . addAll ( elements Without Project ) ĊĠĠĠĠĠĠĠ Ġres . addAll ( elements With Non Player Project ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthere Ġmight Ġbe Ġelements Ġonly Ġwith ĠPlayer Ġproject ĊĠĠĠĠĠĠĠ Ġelements With Player Project . forEach Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! elements With Non Player Project . any Ġ{ Ġel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . url Ġ== Ġplayer . url Ġ&& Ġel . containing Project Entity () !!. name Ġ+ Ġ". Player " Ġ== Ġplayer . containing Project Entity () !!. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} Ċ }