package Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . editor Ċ Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . G dx Json Element Types .* Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . G dx Json Parser Definition Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . G dx Json Parser Definition . Companion . CONTAIN ERS Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . psi . G dx Json J object Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . psi . G dx JsonProperty Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . file types . json . psi . G dx Json String Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . lang . fold ing . Fold ing Builder Ċ import Ġcom . intellij . lang . fold ing . Fold ing Descriptor Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . TokenType . WHITE _ SPACE Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . children ĊĊ Ċ /* Ċ Ġ* Ċ Ġ* ĠAdapt ed Ġfrom Ġhttps :// github . com / Jet Brains / intellij - community / blob / master / json / src / com / intellij / json / editor / fold ing / Json Fold ing Builder . java Ċ Ġ* Ċ Ġ*/ Ċ class ĠG dx Json Fold ing Builder : ĠFold ing Builder , ĠD umb Aware Ġ{ ĊĊĠ Ġoverride Ġfun Ġis Collapsed ByDefault ( node : ĠAST Node ): ĠBoolean Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġbuild Fold Regions ( node : ĠAST Node , Ġdocument : ĠDocument ): ĠArray < Fold ing Descriptor > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġcollect Descriptors Re cursively ( node , Ġdocument , Ġmutable ListOf ()). to Typed Array () ĊĊĠ Ġoverride Ġfun Ġget Placeholder Text ( node : ĠAST Node ): ĠString ? Ġ{ ĊĊĠĠĠ Ġ( node . psi Ġas ? ĠG dx Json J object )?. let Ġ{ Ġj Object Ġ-> ĊĊĠĠĠĠĠ Ġvar Ġcandidate : ĠG dx JsonProperty ? Ġ= Ġnull ĊĠĠĠĠĠ Ġfor Ġ( property : ĠG dx JsonProperty ? Ġin Ġj Object . property List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġproperty ?. name Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġproperty . value ?. value ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠG dx Json String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ" id " Ġ|| Ġname Ġ== Ġ" name ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Ġ= Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( candidate Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Ġ= Ġproperty ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( candidate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"{ Ġ\" ${ candidate . name }\ ": Ġ${ candidate . value ?. text Ġ?: Ġ"" } Ġ... Ġ}" ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġ"{ Ġ... Ġ}" ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( node . elementType Ġ== ĠARRAY ) Ġ{ ĊĊĠĠĠĠĠ Ġreturn Ġ"[ Ġ... Ġ] " ĊĊĠĠĠ Ġ} Ġelse Ġif Ġ( node . elementType Ġin ĠG dx Json Parser Definition . COMMENTS ) Ġ{ ĊĊĠĠĠĠĠ Ġreturn Ġif Ġ( node . elementType Ġ== ĠLINE _ COMMENT ) ĊĠĠĠĠĠĠĠ Ġ"// ... Ġ" ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ" /* ... */ Ġ" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ" ..." ĊĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Descriptors Re cursively ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode : ĠAST Node , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument : ĠDocument , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors : ĠMutable List < Fold ing Descriptor > ĊĠĠĠ Ġ): ĠCollection < Fold ing Descriptor > Ġ{ ĊĊĠĠĠĠĠ Ġval Ġtype Ġ= Ġnode . elementType ĊĊĠĠĠĠĠ Ġif Ġ( type Ġin ĠCON TAIN ERS Ġ&& Ġspans Multiple Lines ( node , Ġdocument )) Ġ{ ĊĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( node , Ġnode . text Range )) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠBLOCK _ COMMENT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( node , Ġnode . text Range )) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠLINE _ COMMENT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Offset Ġ= Ġnode . start Offset ĊĠĠĠĠĠĠĠ Ġval Ġend Offset Ġ= Ġexpand Line Comments Range ( node ) ĊĠĠĠĠĠĠĠ Ġif Ġ( document . get LineNumber ( start Offset ) Ġ!= Ġdocument . get LineNumber ( end Offset )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( node , ĠText Range ( start Offset , Ġend Offset ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġfor Ġ( child Ġin Ġnode . children ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcollect Descriptors Re cursively ( child , Ġdocument , Ġdescriptors ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġdescriptors ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġspans Multiple Lines ( node : ĠAST Node , Ġdocument : ĠDocument ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġval Ġrange Ġ= Ġnode . text Range ĊĠĠĠĠĠ Ġval Ġend Offset Ġ= Ġrange . end Offset ĊĠĠĠĠĠ Ġreturn Ġdocument . get LineNumber ( range . start Offset ) Ġ< ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Offset Ġ< Ġdocument . text Length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . get LineNumber ( end Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . line Count Ġ- Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Line Comments Range ( node : ĠAST Node ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġvar Ġlast Element Ġ= Ġnode ĊĠĠĠĠĠ Ġwhile Ġ( last Element . tree Next . elementType Ġ== ĠLINE _ COMMENT Ġ|| Ġlast Element . tree Next . elementType Ġ== ĠWH ITE _ SPACE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Element Ġ= Ġlast Element . tree Next ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġlast Element . text Range . end Offset ĊĠĠĠ Ġ} ĊĊĠ Ġ} Ċ } Ċ