package Ġorg . crystal . intellij . config Ċ Ċ import Ġcom . intellij . openapi . components . Persistent State Component Ċ import Ġcom . intellij . openapi . components . State Ċ import Ġcom . intellij . openapi . components . Storage Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . util . xml b . Converter Ċ import Ġcom . intellij . util . xml b . annotations . Attribute Ċ import Ġcom . intellij . util . xml b . annotations . Transient Ċ import Ġorg . jetbrains . annotations . Test Only Ċ Ċ @ State ( name Ġ= Ġ" Cr ystal Settings ", Ġstorage s Ġ= Ġ[ Storage (" crystal . xml ") ]) Ċ class ĠCr ystal Project Settings Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproject : ĠProject ? Ġ= Ġnull Ċ ) Ġ: ĠPersistent State Component < Cr ystal Project Settings > Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠLogger . getInstance ( Cr ystal Project Settings :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠVersion Converter Ġ: ĠConverter < Language Version >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString ( value : ĠLanguage Version ) Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLanguage Version . Specific Ġ-> Ġvalue . level . short Name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage Version . Latest Stable Ġ-> Ġ" latest - stable " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom String ( value : ĠString ): ĠLanguage Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . equals (" latest - stable ", Ġtrue )) Ġreturn ĠLanguage Version . Latest Stable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum ValueOf < Language Level >( value ). as Specific Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage Version . Latest Stable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Attribute (" language Level ", Ġconverter Ġ= ĠVersion Converter :: class ) ĊĠĠĠ Ġprivate Ġvar Ġ_ language Version : ĠLanguage Version Ġ= ĠLanguage Version . Latest Stable ĊĊĠĠĠ Ġ@ get : Transient ĊĠĠĠ Ġvar Ġlanguage Version : ĠLanguage Version ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ language Version ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġ_ language Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ language Version Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Ġ!= Ġnull ) ĠCr ystal Language Level Push er . push Language Level ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Only ĊĠĠĠ Ġfun Ġset Language Level Sil ently ( version : ĠLanguage Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ language Version Ġ= Ġversion ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState () Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġfun Ġload State ( state : ĠCr ystal Project Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlanguage Version Ġ= Ġstate . language Version ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠProject . crystal Settings : ĠCr ystal Project Settings ĊĠĠĠ Ġget () Ġ= Ġget Service ( Cr ystal Project Settings :: class . java )