forked from eclipse-jdt/eclipse.jdt.ui
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix folding of 2 consecutive methods
If the second method starts in the same line the first one ends then there will still be 2 foldings. Fixes eclipse-jdt#1539
- Loading branch information
1 parent
3cff735
commit 630f26f
Showing
2 changed files
with
104 additions
and
11 deletions.
There are no files selected for viewing
101 changes: 101 additions & 0 deletions
101
org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/folding/FoldingTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package org.eclipse.jdt.ui.tests.folding; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
|
||
import org.junit.After; | ||
import org.junit.Before; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
|
||
import org.eclipse.core.runtime.CoreException; | ||
|
||
import org.eclipse.jface.text.IRegion; | ||
import org.eclipse.jface.text.Position; | ||
import org.eclipse.jface.text.Region; | ||
import org.eclipse.jface.text.source.Annotation; | ||
import org.eclipse.jface.text.source.projection.ProjectionAnnotation; | ||
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel; | ||
|
||
import org.eclipse.ui.PartInitException; | ||
|
||
import org.eclipse.jdt.core.ICompilationUnit; | ||
import org.eclipse.jdt.core.IJavaProject; | ||
import org.eclipse.jdt.core.IPackageFragment; | ||
import org.eclipse.jdt.core.IPackageFragmentRoot; | ||
import org.eclipse.jdt.core.JavaModelException; | ||
|
||
import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup; | ||
|
||
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility; | ||
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; | ||
|
||
|
||
|
||
public class FoldingTest { | ||
@Rule | ||
public ProjectTestSetup projectSetup = new ProjectTestSetup(); | ||
|
||
private IJavaProject jProject; | ||
private IPackageFragmentRoot sourceFolder; | ||
private IPackageFragment packageFragment; | ||
|
||
@Before | ||
public void setUp() throws CoreException { | ||
jProject = projectSetup.getProject(); | ||
sourceFolder = jProject.findPackageFragmentRoot(jProject.getResource().getFullPath().append("src")); | ||
if (sourceFolder == null) { | ||
sourceFolder = org.eclipse.jdt.testplugin.JavaProjectHelper.addSourceContainer(jProject, "src"); | ||
} | ||
packageFragment = sourceFolder.createPackageFragment("org.example.test", false, null); | ||
} | ||
|
||
@After | ||
public void tearDown() throws CoreException { | ||
org.eclipse.jdt.testplugin.JavaProjectHelper.delete(jProject); | ||
} | ||
|
||
@Test | ||
public void testMethodDeclarationFoldingWithSameLineStart() throws JavaModelException, PartInitException { | ||
String str = """ | ||
package org.example.test; | ||
public class Q { | ||
void a() { | ||
int i = 0; | ||
}void b() { | ||
} | ||
} | ||
"""; | ||
List<IRegion> regions = getProjectionRangesOfFile(str); | ||
assertTrue(regions.size() >= 2); | ||
|
||
regions.sort((r1, r2) -> Integer.compare(r1.getOffset(), r2.getOffset())); | ||
IRegion methodARegion = regions.get(0); | ||
IRegion methodBRegion = regions.get(1); | ||
int methodAEnd = methodARegion.getOffset() + methodARegion.getLength(); | ||
int methodBStart = methodBRegion.getOffset(); | ||
|
||
assertTrue(methodBStart >= methodAEnd); | ||
} | ||
|
||
|
||
private List<IRegion> getProjectionRangesOfFile(String str) throws JavaModelException, PartInitException { | ||
ICompilationUnit cu = packageFragment.createCompilationUnit("TestFolding.java", str, true, null); | ||
JavaEditor editor = (JavaEditor) EditorUtility.openInEditor(cu); | ||
ProjectionAnnotationModel model = editor.getAdapter(ProjectionAnnotationModel.class); | ||
List<IRegion> regions = new ArrayList<>(); | ||
Iterator<Annotation> it = model.getAnnotationIterator(); | ||
while (it.hasNext()) { | ||
Annotation a = it.next(); | ||
if (a instanceof ProjectionAnnotation) { | ||
Position p = model.getPosition(a); | ||
regions.add(new Region(p.getOffset(), p.getLength())); | ||
} | ||
} | ||
return regions; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters