Skip to content

Commit 2d65b39

Browse files
jakub-suligailoveeclipse
authored andcommitted
Fix too many folding regions in anonymous class
Fixes eclipse-jdt#2022
1 parent f298883 commit 2d65b39

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/folding/FoldingTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,6 @@ void x() { //here should be an annotation
458458

459459
@Test
460460
public void testAnonymousClassDeclarationFolding() throws Exception {
461-
// FIXME this test should work for both foldings. See https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/2022
462-
assumeTrue("Currently broken for the 'old' folding. See https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/2022", newFoldingActive);
463461
String str= """
464462
package org.example.test;
465463
public class M {

org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,7 +1637,6 @@ protected void computeFoldingStructure(IJavaElement element, FoldingStructureCom
16371637
boolean collapse= false;
16381638
boolean collapseCode= true;
16391639
switch (element.getElementType()) {
1640-
16411640
case IJavaElement.IMPORT_CONTAINER:
16421641
collapse= ctx.collapseImportContainer();
16431642
includelastLine= true;
@@ -1646,8 +1645,13 @@ protected void computeFoldingStructure(IJavaElement element, FoldingStructureCom
16461645
collapseCode= isInnerType((IType) element) && !isAnonymousEnum((IType) element);
16471646
collapse= ctx.collapseInnerTypes() && collapseCode;
16481647
break;
1649-
case IJavaElement.METHOD:
16501648
case IJavaElement.FIELD:
1649+
if (containsAnonymousChild(element)) {
1650+
return;
1651+
}
1652+
collapse= ctx.collapseMembers();
1653+
break;
1654+
case IJavaElement.METHOD:
16511655
case IJavaElement.INITIALIZER:
16521656
collapse= ctx.collapseMembers();
16531657
break;
@@ -1696,6 +1700,23 @@ protected void computeFoldingStructure(IJavaElement element, FoldingStructureCom
16961700
}
16971701
}
16981702

1703+
private boolean containsAnonymousChild(IJavaElement element) {
1704+
if (!(element instanceof IParent parent)) {
1705+
return false;
1706+
}
1707+
1708+
try {
1709+
for (IJavaElement child : parent.getChildren()) {
1710+
if (child instanceof IType t && t.isAnonymous()) {
1711+
return true;
1712+
}
1713+
}
1714+
} catch (JavaModelException e) {
1715+
JavaPlugin.log(e);
1716+
}
1717+
return false;
1718+
}
1719+
16991720
/**
17001721
* Returns <code>true</code> if <code>type</code> is an anonymous enum declaration,
17011722
* <code>false</code> otherwise. See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=143276

0 commit comments

Comments
 (0)