package Ġcom . win dea . plugin . idea . par ad ox . local isation . editor Ċ Ċ import Ġcom . intellij . lang .* Ċ import Ġcom . intellij . lang . fold ing .* Ċ import Ġcom . intellij . openapi . editor .* Ċ import Ġcom . intellij . openapi . project .* Ċ import Ġcom . intellij . openapi . util .* Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . tree .* Ċ import Ġcom . win dea . plugin . idea . par ad ox .* Ċ import Ġcom . win dea . plugin . idea . par ad ox . local isation . psi .* Ċ Ċ class ĠPar ad ox Local isation Fold ing Builder Ġ: ĠFold ing Builder , ĠD umb Aware Ġ{ Ċ ĉ override Ġfun Ġget Placeholder Text ( node : ĠAST Node ): ĠString Ġ{ Ċĉ ĉ return Ġwhen ( node . elementType ){ Ċĉĉ ĉ Par ad ox Local isation Types . ROOT _ COMMENT Ġ-> Ġ"# ..." Ċĉĉ ĉ Par ad ox Local isation Types . COMMENT Ġ-> Ġ"# ..." Ċĉĉ ĉ else Ġ-> Ġ"< fol ded Ġblock >" Ġ// ä¸į åºĶè¯¥ åĩºçİ° è¿Ļç§į æĥħåĨµ Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġis Collapsed ByDefault ( node : ĠAST Node ): ĠBoolean Ġ{ Ċĉ ĉ return Ġfalse Ċ ĉ } ĊĊ ĉ override Ġfun Ġbuild Fold Regions ( node : ĠAST Node , Ġdocument : ĠDocument ): ĠArray < Fold ing Descriptor > Ġ{ Ċĉ ĉ val Ġdescriptors Ġ= Ġmutable ListOf < Fold ing Descriptor >() Ċĉ ĉ collect Descriptors Re cursively ( node , document , descriptors ) Ċĉ ĉ return Ġdescriptors . to Typed Array () Ċ ĉ } ĊĊ ĉ private Ġfun Ġcollect Descriptors Re cursively ( node : ĠAST Node , Ġdocument : ĠDocument , Ġdescriptors : ĠMutable List < Fold ing Descriptor >) Ġ{ Ċĉ ĉ var Ġstart Offset : ĠInt Ċĉ ĉ var Ġend Offset : ĠInt Ċĉ ĉ if ( node . elementType Ġ== ĠPar ad ox Local isation Types . COMMENT Ġ|| Ġnode . elementType Ġ== ĠPar ad ox Local isation Types . ROOT _ COMMENT ) Ġ{ Ċĉĉ ĉ val Ġcomment Range Ġ= Ġexpand Comments Range ( node . psi ) Ċĉĉ ĉ start Offset Ġ= Ġ( comment Range . getFirst () Ġas ĠPsi Element ). text Range . start Offset Ċĉĉĉ Ġend Offset Ġ= Ġ( comment Range . get Second () Ġas ĠPsi Element ). text Range . end Offset Ċĉĉ ĉ if ( document . get LineNumber ( start Offset ) Ġ!= Ġdocument . get LineNumber ( end Offset )) Ġ{ Ċĉĉĉ ĉ descriptors . add ( Fold ing Descriptor ( node , ĠText Range ( start Offset , Ġend Offset ))) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ val Ġchildren Ġ= Ġnode . getChildren ( null Ġas ĠToken Set ?) Ċĉ ĉ start Offset Ġ= Ġchildren . size Ċĉ ĉ end Offset Ġ= Ġ 0 Ċĉ ĉ while ( end Offset Ġ< Ġstart Offset ) Ġ{ Ċĉĉ ĉ val Ġchild Ġ= Ġchildren [ end Offset ] Ċĉĉ ĉ collect Descriptors Re cursively ( child , Ġdocument , Ġdescriptors ) Ċĉĉ ĉ ++ end Offset Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġfun Ġexpand Comments Range ( element : ĠPsi Element ): ĠCo uple < Psi Element > Ġ{ Ċĉ ĉ return ĠCo uple . of ( find F ur the st Sibling Of Same Type ( element , Ġfalse ), Ġfind F ur the st Sibling Of Same Type ( element , Ġtrue )) Ċ ĉ } Ċ } Ċ