package Ġorg . jetbrains . kotlin . doctor . entity Ċ Ċ actual Ġfun ĠApplication . get Plugin ( name : ĠString ): ĠPlugin ? Ġ{ ĊĠĠĠ Ġval Ġplist Path Ġ= Ġ"$ location / Contents / Info . plist " ĊĠĠĠ Ġif Ġ(! System . file Exists ( plist Path )) Ġreturn Ġnull ĊĠĠĠ Ġval Ġplist Ġ= ĠSystem . parse P list ( plist Path ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġdata Dirs Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġdata DirectoryName Ġ= Ġ(( plist [" JVM Options "] Ġas ? ĠMap < *, Ġ* >) ĊĠĠĠĠĠĠĠ Ġ? . get (" Properties ") Ġas ? ĠMap < *, Ġ* >) ĊĠĠĠĠĠĠĠ Ġ? . get (" idea . paths . selector ") ?. toString ()?. trim ('" ') ĊĠĠĠ Ġif Ġ( data DirectoryName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Dirs . add ("${ System . home Dir }/ Library / Application ĠSupport / Google /$ data DirectoryName ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġdata Dirs . add ("$ location / Contents ") ĊĊĊĠĠĠ Ġreturn Ġdata Dirs . first NotNull Of OrNull Ġ{ Ġfind Plugin ( it , Ġname ) Ġ} Ċ } Ċ Ċ private Ġfun Ġfind Plugin ( data Dir : ĠString , Ġplugin Name : ĠString ): ĠPlugin ? Ġ{ ĊĠĠĠ Ġval Ġj ars Ġ= ĠSystem . execute ( ĊĠĠĠĠĠĠĠ Ġ" find ", ĊĠĠĠĠĠĠĠ Ġ"$ data Dir / plugins /$ plugin Name / lib ", Ġ"- name ", Ġ"*. jar " ĊĠĠĠ Ġ). output ?. split ("\ n ") Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġplugin Xml Ġ= Ġj ars . first NotNull Of OrNull Ġ{ ĠSystem . read Arch ived File ( it , Ġ" META - INF / plugin . xml ") Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġversion Ġ= ĠRegex ("< version >( .+ ? )</ version > "). find ( plugin Xml )?. groups ?. get ( 1 )?. value Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġid Ġ= ĠRegex ("< id >( .+ ? )</ id > "). find ( plugin Xml )?. groups ?. get ( 1 )?. value Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġdisabled Plugins Ġ= ĠSystem . readFile ("$ data Dir / disabled _ plugins . txt ") ĊĠĠĠ Ġval Ġis Enabled Ġ= Ġdisabled Plugins Ġ== Ġnull Ġ|| Ġ! disabled Plugins . contains ( id ) ĊĠĠĠ Ġreturn ĠPlugin ( plugin Name , Ġid , ĠVersion ( version ), Ġis Enabled ) Ċ } Ċ Ċ actual Ġfun Ġapp From Path ( path : ĠString ): ĠApplication ? Ġ{ ĊĠĠĠ Ġval Ġplist Ġ= ĠSystem . parse P list ("$ path / Contents / Info . plist ") Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġversion Ġ= Ġplist [" CF Bundle Short Version String "] ?. toString ()?. trim ('" ') Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġname Ġ= Ġplist [" CF Bundle Name "] ?. toString ()?. trim ('" ') Ġ?: Ġpath . substring After Last ("/ "). substring Before Last (".") ĊĠĠĠ Ġreturn ĠApplication ( name , ĠVersion ( version ), Ġpath ) Ċ } Ċ Ċ actual Ġfun ĠApplication . get Embedded Java Version (): ĠVersion ? Ġ= ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" jre / Contents / Home ", ĊĠĠĠĠĠĠĠ Ġ" jre / jd K / Contents / Home ", ĊĠĠĠĠĠĠĠ Ġ" jre ", ĊĠĠĠĠĠĠĠ Ġ" j br / Contents / Home " ĊĠĠĠ Ġ). first NotNull Of OrNull Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠ ĠSystem . execute ("$ location / Contents /$ path / bin / java ", Ġ"-- version "). output ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . line Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠVersion ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊ