mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lambda folding (IDEA-168014)
This commit is contained in:
+21
-1
@@ -60,7 +60,8 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
if (element instanceof PsiImportList) {
|
||||
return "...";
|
||||
}
|
||||
if (element instanceof PsiMethod || element instanceof PsiClassInitializer || element instanceof PsiClass) {
|
||||
if (element instanceof PsiMethod || element instanceof PsiClassInitializer || element instanceof PsiClass ||
|
||||
element instanceof PsiLambdaExpression) {
|
||||
return "{...}";
|
||||
}
|
||||
if (element instanceof PsiDocComment) {
|
||||
@@ -168,6 +169,13 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
|
||||
return new TextRange(startOffset, last.getTextRange().getEndOffset());
|
||||
}
|
||||
|
||||
if (element instanceof PsiLambdaExpression) {
|
||||
PsiElement body = ((PsiLambdaExpression)element).getBody();
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
return body.getTextRange();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -675,6 +683,9 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
else if (element instanceof PsiComment) {
|
||||
return settings.isCollapseEndOfLineComments();
|
||||
}
|
||||
else if (element instanceof PsiLambdaExpression) {
|
||||
return settings.isCollapseLambdas();
|
||||
}
|
||||
else {
|
||||
LOG.error("Unknown element:" + element);
|
||||
return false;
|
||||
@@ -714,6 +725,15 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
super.visitNewExpression(expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLambdaExpression(PsiLambdaExpression expression) {
|
||||
PsiElement body = expression.getBody();
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
addToFold(foldElements, expression, document, true);
|
||||
}
|
||||
super.visitLambdaExpression(expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitComment(PsiComment comment) {
|
||||
addCommentFolds(comment, processedComments, foldElements);
|
||||
|
||||
@@ -97,6 +97,22 @@ class Test {
|
||||
assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("MyAction("))?.placeholderText == '() ' + JavaFoldingBuilder.rightArrow + ' { '
|
||||
}
|
||||
|
||||
void "test folding lambda with block body"() {
|
||||
def text = """\
|
||||
class Test {
|
||||
void test() {
|
||||
Runnable action = () -> {
|
||||
System.out.println();
|
||||
};
|
||||
}
|
||||
}
|
||||
"""
|
||||
configure text
|
||||
def foldingModel = myFixture.editor.foldingModel as FoldingModelImpl
|
||||
|
||||
assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("System.out.println"))?.placeholderText == '{...}'
|
||||
}
|
||||
|
||||
private def configure(String text) {
|
||||
myFixture.configureByText("a.java", text)
|
||||
CodeFoldingManagerImpl.getInstance(getProject()).buildInitialFoldings(myFixture.editor)
|
||||
|
||||
Reference in New Issue
Block a user