/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠRe ece ĠH . ĠD un n Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġuk . co . re ec ed un n . intellij . plugin . xpath . lang . editor . fold ing Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . lang . fold ing . Fold ing Builder Ex Ċ import Ġcom . intellij . lang . fold ing . Fold ing Descriptor Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . tree . Token Set Ċ import Ġcom . intellij . psi . util . elementType Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . sequences . walk Tree Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xpath . ast . plugin . Plugin Context Item Function Expr Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xpath . ast . plugin . Plugin Lambda Function Expr Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xpath . ast . xpath .* Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xpath . parser . XPath ElementType Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xpath . psi . enc losed Expression Blocks Ċ Ċ class ĠXPath Fold ing Builder Ġ: ĠFold ing Builder Ex () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild Fold Regions ( root : ĠPsi Element , Ġdocument : ĠDocument , Ġquick : ĠBoolean ): ĠArray < Fold ing Descriptor > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescriptors Ġ= ĠArrayList < Fold ing Descriptor >() ĊĠĠĠĠĠĠĠ Ġroot . walk Tree (). forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġget Single Fold ing Range ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range ?. isEmpty Ġ== Ġfalse Ġ&& Ġchild . text Contains ('\ n ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( child , Ġrange )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget En closed Expr Container ( child )?. enc losed Expression Blocks ?. forEach Ġ{ Ġblock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block . is Multi Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( child , Ġblock . text Range )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdescriptors . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Placeholder Text ( node : ĠAST Node ): ĠString ? Ġ= Ġwhen Ġ( node . elementType ) Ġ{ ĊĠĠĠĠĠĠĠ ĠXPath ElementType . COMMENT Ġ-> Ġ" (: ... : )" ĊĠĠĠĠĠĠĠ ĠXPath ElementType . CONTEXT _ ITEM _ FUNCTION _ EXPR Ġ-> Ġ". { ... }" ĊĠĠĠĠĠĠĠ ĠXPath ElementType . L AMBDA _ FUNCTION _ EXPR Ġ-> Ġ" _{ ... }" ĊĠĠĠĠĠĠĠ Ġin ĠEN CLOSED _ EXPR _ CONTAINER Ġ-> Ġ"{ ... }" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Collapsed ByDefault ( node : ĠAST Node ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġget En closed Expr Container ( element : ĠPsi Element ): ĠPsi Element ? Ġ= Ġwhen Ġ( element . elementType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin ĠEN CLOSED _ EXPR _ CONTAINER Ġ-> Ġelement ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Single Fold ing Range ( element : ĠPsi Element ): ĠText Range ? Ġ= Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠPlugin Context Item Function Expr Ġ-> Ġelement . text Range ĊĠĠĠĠĠĠĠ Ġis ĠPlugin Lambda Function Expr Ġ-> Ġelement . text Range ĊĠĠĠĠĠĠĠ Ġis ĠXPath Comment Ġ-> Ġelement . text Range ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEN CLOSED _ EXPR _ CONTAINER Ġ= ĠToken Set . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . ARROW _ INLINE _ FUNCTION _ CALL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . CURL Y _ ARRAY _ CON STRUCTOR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . FT _ EXTENSION _ SELECTION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . FT _ WEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . FT _ WORDS _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . INLINE _ FUNCTION _ EXPR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . MAP _ CON STRUCTOR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXPath ElementType . WITH _ EXPR ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ