package Ġcom . jetbrains . r ider . plugins . unity . run . configurations Ċ Ċ import Ġcom . intellij . execution . process . OS Process Util Ċ import Ġcom . intellij . execution . process . Process Info Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . jetbrains . rd . util . lifetime . Lifetime Ċ import Ġcom . jetbrains . rd . util . reactive . I Property Ċ import Ġcom . jetbrains . rd . util . reactive . Property Ċ import Ġcom . jetbrains . rd . util . reactive . View able List Ċ import Ġcom . jetbrains . r ider . plugins . unity . run . attach . Unity Run Util Ċ import Ġcom . jetbrains . r ider . plugins . unity . util . Editor Instance Json Ċ import Ġcom . jetbrains . r ider . plugins . unity . util . Editor Instance Json Status Ċ Ċ class ĠUnity Attach To Editor ViewModel ( val Ġlifetime : ĠL ifetime , Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġval Ġeditor Instance Json Status : ĠEditor Instance Json Status ĊĠĠĠ Ġval Ġeditor Processes : ĠView able List < Editor Process Info > Ġ= ĠView able List () ĊĠĠĠ Ġval Ġpid : ĠI Property < Int ?> Ġ= ĠProperty ( null ) ĊĠĠĠ Ġval Ġis User Selected Pid Ġ: ĠProperty < Boolean > Ġ= ĠProperty ( false ) ĊĠĠĠ Ġdata Ġclass ĠEditor Process Info ( val Ġname : ĠString , Ġval Ġpid : ĠInt ?) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocess List Ġ= ĠOS Process Util . get Process List () ĊĠĠĠĠĠĠĠ Ġupdate Process List ( process List ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( status , Ġeditor Instance Json ) Ġ= Ġread Editor Instance Json ( project , Ġprocess List ) ĊĠĠĠĠĠĠĠ Ġeditor Instance Json Status Ġ= Ġstatus ĊĠĠĠĠĠĠĠ Ġthis . pid . value Ġ= Ġif Ġ( status Ġ!= ĠEditor Instance Json Status . Valid Ġ&& Ġeditor Processes . count () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Processes [ 0 ]. pid ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Instance Json ?. process _ id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Process List ( process List : ĠArray < out ĠProcess Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Unity Run Util . is Unity Editor Process ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Processes . add ( Editor Process Info ( it . executable Name , Ġit . pid )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Editor Instance Json ( project : ĠProject , Ġprocess List : ĠArray < Process Info >): ĠPair < Editor Instance Json Status , ĠEditor Instance Json ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Instance Json Ġ= ĠEditor Instance Json . load ( project ) ĊĠĠĠĠĠĠĠ Ġif Ġ( editor Instance Json . first Ġ== ĠEditor Instance Json Status . Valid Ġ&& Ġ! isValid Process Id ( editor Instance Json . second !! , Ġprocess List )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( Editor Instance Json Status . Out dated , Ġeditor Instance Json . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġeditor Instance Json ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisValid Process Id ( editor Instance Json : ĠEditor Instance Json , Ġprocess List : ĠArray < Process Info >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġprocesses , Ġif Ġit Ġexists Ġand Ġhas Ġthe Ġcorrect Ġname , Ġreturn Ġit Ġunchanged , ĊĠĠĠĠĠĠĠ Ġ// Ġelse Ġreturn Ġinvalid Value . ĠDo Ġnot Ġthrow , Ġas Ġwe 'll Ġattempt Ġto Ġrecover ĊĠĠĠĠĠĠĠ Ġreturn Ġprocess List . any Ġ{ Ġit . pid Ġ== Ġeditor Instance Json . process _ id Ġ&& ĠUnity Run Util . is Unity Editor Process ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Process List () Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor Processes . clear () ĊĠĠĠĠĠĠĠ Ġval Ġprocess List Ġ= ĠOS Process Util . get Process List () ĊĠĠĠĠĠĠĠ Ġupdate Process List ( process List ) ĊĠĠĠ Ġ} Ċ }