package Ġorg . elm . workspace Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Properties Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . fasterxml . jackson . core . Json Processing Exception Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . node . Json NodeType Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . util . io . exists Ċ import Ġorg . elm . openapi ext . refresh And Find File By Path Test Aware Ċ import Ġorg . elm . workspace . Elm Tool chain . Companion . SID EC AR _ FILENAME Ċ import Ġorg . elm . workspace . solver . Pkg Ċ import Ġorg . elm . workspace . solver . Pkg Name Ċ import Ġorg . elm . workspace . solver . Repository Ċ import Ġorg . elm . workspace . solver . solve Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths ĊĊ Ċ class ĠEl m Project Loader ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrepo : ĠEl m Package Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġversions By Package : ĠMap < String , ĠVersion > Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġload ( packageName : ĠString ): ĠEl m Package Project Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġversions By Package [ packageName ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠProject Load Exception (" Could Ġnot Ġfind Ġsuitable Ġversion Ġof Ġ$ packageName ") ĊĠĠĠĠĠĠĠ Ġval Ġmanifest Path Ġ= Ġrepo . find Package Manifest ( packageName , Ġversion ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġdto Ġ= Ġparse DTO ( manifest Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEl m Package Project DTO Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl m Package Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Path Ġ= Ġmanifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelm Version Ġ= Ġdto . elm Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdto . deps . keys . map Ġ{ Ġload ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dependencies Ġ= Ġempty List (), Ġ// Ġwe Ġonly Ġuse Ġthis Ġfor Ġtop - level Ġpackages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories Ġ= ĠlistOf ( Paths . get (" src ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġdto . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġdto . version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexposed Modules Ġ= Ġdto . ex posed Modules Node . to Ex posed Module Map ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" should Ġnever Ġhappen ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġtop Level Load ( manifest Path : ĠPath , Ġrepo : ĠEl m Package Repository ): ĠEl m Project Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġdto Ġ= Ġparse DTO ( manifest Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEl m Application Project DTO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeps Ġ= Ġwith ( dto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeps . direct Ġ+ Ġdeps . indirect Ġ+ Ġtest Deps . direct Ġ+ Ġtest Deps . indirect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloader Ġ= ĠEl m Project Loader ( repo , Ġdeps ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dto . deps . direct . keys . contains (" lam der a / core ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL am der a Application Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Path Ġ= Ġmanifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelm Version Ġ= Ġdto . elm Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdto . deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dependencies Ġ= Ġdto . test Deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories Ġ= Ġdto . source Directories . map Ġ{ ĠPaths . get ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Relative DirPath Ġ= Ġfind And Parse Side car For ( manifest Path )?. test Directory Ġ?: ĠDEFAULT _ TESTS _ DIR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġimprove Ġdetection Ġelm - review ĠONLY Ġproject : Ġtoplevel Ġtype Ġ` List ĠRule ` Ġ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreview Deps Ġ= Ġset Of (" jf men ge ls / elm - review ", Ġ" elm / core ", Ġ" st il 4 m / elm - syntax ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dto . deps . direct . keys . intersect ( review Deps ). size Ġ== Ġreview Deps . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl m Review Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Path Ġ= Ġmanifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelm Version Ġ= Ġdto . elm Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdto . deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dependencies Ġ= Ġdto . test Deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories Ġ= Ġdto . source Directories . map Ġ{ ĠPaths . get ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Relative DirPath Ġ= Ġfind And Parse Side car For ( manifest Path )?. test Directory Ġ?: ĠDEFAULT _ TESTS _ DIR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl m Application Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Path Ġ= Ġmanifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelm Version Ġ= Ġdto . elm Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdto . deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dependencies Ġ= Ġdto . test Deps . direct . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories Ġ= Ġdto . source Directories . map Ġ{ ĠPaths . get ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Relative DirPath Ġ= Ġfind And Parse Side car For ( manifest Path )?. test Directory Ġ?: ĠDEFAULT _ TESTS _ DIR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEl m Package Project DTO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeps Ġ= Ġsolve ( dto . deps Ġ+ Ġdto . test Deps , Ġrepo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠProject Load Exception (" un sol vable Ġconstraints ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloader Ġ= ĠEl m Project Loader ( repo , Ġdeps ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl m Package Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Path Ġ= Ġmanifest Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelm Version Ġ= Ġdto . elm Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdto . deps . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dependencies Ġ= Ġdto . test Deps . keys . map Ġ{ Ġloader . load ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Directories Ġ= ĠlistOf ( Paths . get (" src ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġdto . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġdto . version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexposed Modules Ġ= Ġdto . ex posed Modules Node . to Ex posed Module Map ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisValid ( manifest Path : ĠPath ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse DTO ( manifest Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠProvides Ġaccess Ġto Ġthe ĠEl m Ġpackages Ġstored Ġon - disk Ġby Ġthe ĠEl m Ġcompiler Ġin Ġ`~/. elm ` Ċ Ġ*/ Ċ class ĠEl m Package Repository ( override Ġval Ġelm Compiler Version : ĠVersion ) Ġ: ĠRepository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġin Mem Cache : ĠMutable Map < String , ĠList < Pkg >> Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġval Ġelm Home Path : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThe ĠEl m Ġcompiler Ġfirst Ġchecks Ġthe ĠEL M _ HOME Ġenvironment Ġvariable . ĠIf Ġnot Ġfound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġwill Ġfallback Ġto Ġthe Ġpath Ġreturned Ġby ĠHaskell 's Ġ` System . Directory . getApp UserData Directory ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelm Home Var Ġ= ĠSystem . getenv (" EL M _ HOME ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elm Home Var Ġ!= Ġnull Ġ&& ĠPaths . get ( elm Home Var ). exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġelm Home Var ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info . is Unix Ġ-> ĠFile Util . expand User Home (" ~/. elm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info . is Mac Ġ-> ĠFile Util . expand User Home (" ~/. elm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info . is Windows Ġ-> ĠFile Util . expand User Home (" ~/ AppData / Roaming / elm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġplatform ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPath Ġto ĠEl m 's Ġglobal Ġpackage Ġcache Ġdirectory ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġglobal Package Cache Dir : ĠPath ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġ 0 . 1 9 . 0 , Ġthe Ġdirectory Ġname Ġwas Ġsingular , Ġbut Ġbeginning Ġin Ġ 0 . 1 9 . 1 Ġit Ġis Ġnow Ġplural ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Dir Name Ġ= Ġwhen Ġ( elm Compiler Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVersion ( 0 , Ġ 1 9 , Ġ 0 ) Ġ-> Ġ" package " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" packages " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPaths . get ("$ elm Home Path /$ elm Compiler Version /$ sub Dir Name /") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPath Ġto Ġthe Ġmanifest Ġfile Ġfor Ġthe ĠEl m Ġpackage Ġ[ name ] Ġat Ġversion Ġ[ version ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Package Manifest ( name : ĠString , Ġversion : ĠVersion ): ĠPath Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġglobal Package Cache Dir . resolve ("$ name /$ version /${ Elm Tool chain . EL M _ JSON }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( name : ĠP kg Name ): ĠList < Pkg > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Mem Cache . get Or Put ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( File ("$ global Package Cache Dir /$ name / "). list Files () Ġ?: Ġempty Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠVersion . parse OrNull ( dir . name ) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproj Ġ= Ġparse DTO ( dir . to Path (). resolve (" elm . json ")) Ġas ĠEl m Package Project DTO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠP kg Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠP kg Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġversion : ĠVersion Ġ= Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġelm Constraint : ĠConstraint Ġ= Ġproj . elm Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdependencies : ĠMap < Pkg Name , ĠConstraint > Ġ= Ġproj . deps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } ĊĊ Ċ // ĠD TO s Ġfor ĠJSON ĠDe coding Ċ Ċ private Ġfun Ġparse DTO ( manifest Path : ĠPath ): ĠEl m Project DTO Ġ{ ĊĠĠĠ Ġval Ġmanifest Stream Ġ= Ġrefresh And Find File By Path Test Aware ( manifest Path )?. inputStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠProject Load Exception (" Manifest Ġfile Ġnot Ġfound : Ġ$ manifest Path ") ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠobjectMapper . read Tree ( manifest Stream ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtype Ġ= Ġnode . get (" type ") ?. text Value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application " Ġ-> ĠobjectMapper . tree To Value ( node , ĠEl m Application Project DTO :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" package " Ġ-> ĠobjectMapper . tree To Value ( node , ĠEl m Package Project DTO :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠProject Load Exception (" Invalid Ġelm . json : Ġunexpected Ġtype Ġ'$ type '") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠJson Processing Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠProject Load Exception (" Invalid Ġelm . json : Ġ${ e . message }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠobjectMapper Ġ= ĠObjectMapper () Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ private Ġsealed Ġclass ĠEl m Project DTO ĊĊ Ċ private Ġclass ĠEl m Application Project DTO ( ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" elm - version ") Ġval Ġelm Version : ĠVersion , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" source - directories ") Ġval Ġsource Directories : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" dependencies ") Ġval Ġdeps : ĠExact Dependencies DTO , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" test - dependencies ") Ġval Ġtest Deps : ĠExact Dependencies DTO Ċ ) Ġ: ĠEl m Project DTO () ĊĊ Ċ private Ġclass ĠExact Dependencies DTO ( ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" direct ") Ġval Ġdirect : ĠMap < String , ĠVersion >, ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" indirect ") Ġval Ġindirect : ĠMap < String , ĠVersion > Ċ ) ĊĊ Ċ private Ġclass ĠEl m Package Project DTO ( ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" elm - version ") Ġval Ġelm Version : ĠConstraint , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" dependencies ") Ġval Ġdeps : ĠMap < String , ĠConstraint >, ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" test - dependencies ") Ġval Ġtest Deps : ĠMap < String , ĠConstraint >, ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" name ") Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" version ") Ġval Ġversion : ĠVersion , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" ex posed - modules ") Ġval Ġexposed Modules Node : ĠJsonNode Ċ ) Ġ: ĠEl m Project DTO () ĊĊ Ċ private Ġfun ĠJsonNode . to Ex posed Module Map (): ĠList < String > Ġ{ ĊĠĠĠ Ġ// ĠNormalize Ġthe Ġ 2 Ġexposed - modules Ġformats Ġinto Ġa Ġsingle Ġformat . ĊĠĠĠ Ġ// Ġformat Ġ 1 : Ġa Ġlist Ġof Ġstrings , Ġwhere Ġeach Ġstring Ġis Ġthe Ġname Ġof Ġan Ġexposed Ġmodule ĊĠĠĠ Ġ// Ġformat Ġ 2 : Ġa Ġmap Ġwhere Ġthe Ġkeys Ġare Ġcategories Ġand Ġthe Ġvalues Ġare Ġthe Ġnames Ġof Ġthe Ġmodules ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠ Ġexposed Ġin Ġthat Ġcategory . ĠWe Ġdiscard Ġthe Ġcategories Ġbecause Ġthey Ġare Ġnot Ġuseful . ĊĠĠĠ Ġreturn Ġwhen Ġ( this . nodeType ) Ġ{ ĊĠĠĠĠĠĠĠ ĠJson NodeType . ARRAY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . elements (). as Sequence (). map Ġ{ Ġit . text Value () Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠJson NodeType . OBJECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fields (). as Sequence (). flatMap Ġ{ Ġ(_, Ġname Nodes ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Nodes . as Sequence (). map Ġ{ Ġit . text Value () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" ex posed - modules ĠJSON Ġmust Ġbe Ġeither Ġan Ġarray Ġor Ġan Ġobject ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġfind And Parse Side car For ( manifest Path : ĠPath ): ĠEl m Side car Manifest DTO ? Ġ= ĊĠĠĠĠĠĠĠ ĠLocal FileSystem . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. refresh And Find File By Path ( manifest Path . resolve Sibling ( SID EC AR _ FILENAME ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . inputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . readValue ( it , ĠEl m Side car Manifest DTO :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJson Processing Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProject Load Exception (" Invalid Ġelm . intellij . json : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠD TO Ġused Ġto Ġwrap Ġthe Ġdata Ġin Ġ` elm . intellij . json `. Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Elm Tool chain . SID EC AR _ FILENAME ] Ċ Ġ*/ Ċ private Ġclass ĠEl m Side car Manifest DTO ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġpath Ġto Ġthe Ġdirectory Ġcontaining Ġthe Ġunit Ġtests , Ġrelative Ġto Ġthe Ġroot Ġof Ġthe ĠEl m Ġproject . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" test - directory ") Ġval Ġtest Directory : ĠString Ċ ) Ċ