boolean (@NotNull List<? super FoldingDescriptor> list, @NotNull PsiMethod method) { boolean collapseOneLineMethods = JavaCodeFoldingSettings.getInstance().isCollapseOneLineMethods(); if (!collapseOneLineMethods) { return false; } Document document = method.getContainingFile().getViewProvider().getDocument(); PsiCodeBlock body = method.getBody(); PsiIdentifier nameIdentifier = method.getNameIdentifier(); if (body == null || document == null || nameIdentifier == null) { return false; } TextRange parameterListTextRange = method.getParameterList().getTextRange(); if (parameterListTextRange == null || document.getLineNumber(nameIdentifier.getTextRange().getStartOffset()) != document.getLineNumber(parameterListTextRange.getEndOffset())) { return false; } PsiJavaToken lBrace = body.getLBrace(); PsiJavaToken rBrace = body.getRBrace(); PsiStatement[] statements = body.getStatements(); if (lBrace == null || rBrace == null || statements.length != 1) { return false; } PsiStatement statement = statements[0]; if (statement.textContains('\n')) { return false; } if (!areOnAdjacentLines(lBrace, statement, document) || !areOnAdjacentLines(statement, rBrace, document)) { //the user might intend to type at an empty line return false; } int leftStart = parameterListTextRange.getEndOffset(); int bodyStart = body.getTextRange().getStartOffset(); if (bodyStart > leftStart && !StringUtil.isEmptyOrSpaces(document.getCharsSequence().subSequence(leftStart + 1, bodyStart))) { return false; } int leftEnd = statement.getTextRange().getStartOffset(); int rightStart = statement.getTextRange().getEndOffset(); int rightEnd = body.getTextRange().getEndOffset(); if (leftEnd <= leftStart + 1 || rightEnd <= rightStart + 1) { return false; } String leftText = " { "; String rightText = " }"; if (!fitsRightMargin(method, document, leftStart, rightEnd, rightStart - leftEnd + leftText.length() + rightText.length())) { return false; } FoldingGroup group = FoldingGroup.newGroup("one-liner"); list.add(new FoldingDescriptor(lBrace.getNode(), new TextRange(leftStart, leftEnd), group, leftText, true, Collections.emptySet())); list.add(new FoldingDescriptor(rBrace.getNode(), new TextRange(rightStart, rightEnd), group, rightText, true, Collections.emptySet())); return true; }