@@ -153,6 +153,10 @@ private static void buildFolding(@NotNull ASTNode node, List<FoldingDescriptor>
153
153
descriptor = buildImportsFolding (node );
154
154
} else if (isCodeBlock (elementType )) {
155
155
descriptor = buildCodeBlockFolding (node );
156
+ } else if (isReificationBlock (elementType )) {
157
+ descriptor = buildReificationFolding (node );
158
+ } else if (isCollectionLiteral (elementType )) {
159
+ descriptor = buildCollectionBlockFolding (node );
156
160
} else if (isBodyBlock (elementType )) {
157
161
descriptor = buildBodyBlockFolding (node );
158
162
} else if (isComment (elementType , node )) {
@@ -270,12 +274,18 @@ private static void buildCCMarkerRegions(List<FoldingDescriptor> descriptors, Li
270
274
}
271
275
272
276
private static boolean isCodeBlock (IElementType elementType ) {
273
- return elementType == BLOCK_STATEMENT ;
277
+ return BLOCK_TYPES .contains (elementType );
278
+ }
279
+ private static boolean isReificationBlock (IElementType elementType ) {
280
+ return elementType == MACRO_EXPRESSION_REIFICATION ;
274
281
}
275
282
276
283
private static boolean isBodyBlock (IElementType elementType ) {
277
284
return CLASS_BODY_TYPES .contains (elementType );
278
285
}
286
+ private static boolean isCollectionLiteral (IElementType elementType ) {
287
+ return COLLECTION_LITERAL .contains (elementType );
288
+ }
279
289
280
290
private static boolean isComment (IElementType elementType , ASTNode node ) {
281
291
return ONLY_COMMENTS .contains (elementType );
@@ -361,19 +371,35 @@ private static FoldingDescriptor buildCodeBlockFolding(@NotNull ASTNode node) {
361
371
final ASTNode openBrace = node .getFirstChildNode ();
362
372
final ASTNode closeBrace = node .getLastChildNode ();
363
373
364
- return buildBlockFolding (node , openBrace , closeBrace );
374
+ return buildBlockFolding (node , openBrace , closeBrace , PLCURLY , PRCURLY );
375
+ }
376
+ private static FoldingDescriptor buildReificationFolding (@ NotNull ASTNode node ) {
377
+ // MACRO_EXPRESSION_REIFICATION contains a set of different reification expressions so we need to go one level deeper.
378
+ ASTNode reification = node .getFirstChildNode ();
379
+
380
+ final ASTNode openBrace = reification .getFirstChildNode ().getTreeNext ();
381
+ final ASTNode closeBrace = reification .getLastChildNode ();
382
+
383
+ return buildBlockFolding (node , openBrace , closeBrace , PLCURLY , PRCURLY );
384
+ }
385
+
386
+ private static FoldingDescriptor buildCollectionBlockFolding (@ NotNull ASTNode node ) {
387
+ final ASTNode openBrace = node .getFirstChildNode ();
388
+ final ASTNode closeBrace = node .getLastChildNode ();
389
+
390
+ return buildBlockFolding (node , openBrace , closeBrace , PLBRACK , PRBRACK );
365
391
}
366
392
367
393
private static FoldingDescriptor buildBodyBlockFolding (@ NotNull ASTNode node ) {
368
- final ASTNode openBrace = UsefulPsiTreeUtil . getPrevSiblingSkipWhiteSpacesAndComments ( node );
369
- final ASTNode closeBrace = UsefulPsiTreeUtil . getNextSiblingSkipWhiteSpacesAndComments ( node );
394
+ final ASTNode openBrace = node . getFirstChildNode ( );
395
+ final ASTNode closeBrace = node . getLastChildNode ( );
370
396
371
- return buildBlockFolding (node , openBrace , closeBrace );
397
+ return buildBlockFolding (node , openBrace , closeBrace , PLCURLY , PRCURLY );
372
398
}
373
399
374
- private static FoldingDescriptor buildBlockFolding (@ NotNull ASTNode node , ASTNode openBrace , ASTNode closeBrace ) {
400
+ private static FoldingDescriptor buildBlockFolding (@ NotNull ASTNode node , ASTNode openBrace , ASTNode closeBrace , IElementType openElementType , IElementType closeElementType ) {
375
401
TextRange textRange ;
376
- if (openBrace != null && closeBrace != null && openBrace .getElementType () == PLCURLY && closeBrace .getElementType () == PRCURLY ) {
402
+ if (openBrace != null && closeBrace != null && openBrace .getElementType () == openElementType && closeBrace .getElementType () == closeElementType ) {
377
403
textRange = new TextRange (openBrace .getTextRange ().getEndOffset (), closeBrace .getStartOffset ());
378
404
} else {
379
405
textRange = node .getTextRange ();
0 commit comments