mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-75016 Detect and fold javadoc-style comments in a file header
Javadoc-style file header is supported for java files as well now.
This commit is contained in:
@@ -80,7 +80,7 @@ public class JavaFoldingBuilder extends FoldingBuilderEx implements DumbAware {
|
||||
PsiElement anchorElementToUse = file;
|
||||
PsiElement candidate = file.getFirstChild();
|
||||
|
||||
// There experienced the following problem situation:
|
||||
// We experienced the following problem situation:
|
||||
// 1. There is a collapsed class-level javadoc;
|
||||
// 2. User starts typing at class definition line (e.g. we had definition like 'public class Test' and user starts
|
||||
// typing 'abstract' between 'public' and 'class');
|
||||
@@ -224,6 +224,16 @@ public class JavaFoldingBuilder extends FoldingBuilderEx implements DumbAware {
|
||||
return !(element.getParent() instanceof PsiFile) && settings.isCollapseInnerClasses();
|
||||
}
|
||||
else if (element instanceof PsiDocComment) {
|
||||
PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiJavaFile) {
|
||||
PsiElement firstChild = parent.getFirstChild();
|
||||
if (firstChild instanceof PsiWhiteSpace) {
|
||||
firstChild = firstChild.getNextSibling();
|
||||
}
|
||||
if (element.equals(firstChild)) {
|
||||
return settings.isCollapseFileHeader();
|
||||
}
|
||||
}
|
||||
return settings.isCollapseJavadocs();
|
||||
}
|
||||
else if (element instanceof PsiJavaFile) {
|
||||
@@ -421,7 +431,7 @@ public class JavaFoldingBuilder extends FoldingBuilderEx implements DumbAware {
|
||||
processedComments.add(current);
|
||||
continue;
|
||||
}
|
||||
if (elementType == JavaTokenType.WHITE_SPACE) {
|
||||
if (elementType == TokenType.WHITE_SPACE) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
@@ -592,7 +602,9 @@ public class JavaFoldingBuilder extends FoldingBuilderEx implements DumbAware {
|
||||
if (lastLineEnd > 0 && seq.charAt(lastLineEnd) == '\n') lastLineEnd--;
|
||||
if (lastLineEnd < firstLineStart) return false;
|
||||
|
||||
final String baseClassName = quick ? anonymousClass.getBaseClassReference().getReferenceName() : anonymousClass.getBaseClassType().resolve().getName();
|
||||
PsiClass resolve = anonymousClass.getBaseClassType().resolve();
|
||||
assert resolve != null;
|
||||
final String baseClassName = quick ? anonymousClass.getBaseClassReference().getReferenceName() : resolve.getName();
|
||||
if (lastLineEnd >= seq.length() || firstLineStart >= seq.length() || firstLineStart < 0) {
|
||||
LOG.error("llE=" + lastLineEnd + "; fLS=" + firstLineStart + "; len=" + seq.length() + "rE=" + rangeEnd + "; class=" +
|
||||
baseClassName);
|
||||
@@ -602,7 +614,9 @@ public class JavaFoldingBuilder extends FoldingBuilderEx implements DumbAware {
|
||||
public String fun(final PsiParameter psiParameter) {
|
||||
String typeName;
|
||||
if (quick) {
|
||||
typeName = psiParameter.getTypeElement().getText();
|
||||
PsiTypeElement typeElement = psiParameter.getTypeElement();
|
||||
assert typeElement != null;
|
||||
typeName = typeElement.getText();
|
||||
}
|
||||
else {
|
||||
typeName = psiParameter.getType().getPresentableText();
|
||||
|
||||
@@ -31,16 +31,14 @@ public class JavaFoldingTest extends LightCodeInsightFixtureTestCase {
|
||||
}
|
||||
|
||||
public void testEditingImports() {
|
||||
myFixture.configureByText "a.java", """\
|
||||
configure """\
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
<caret>
|
||||
|
||||
class Foo { List a; Map b; }
|
||||
"""
|
||||
|
||||
CodeFoldingManagerImpl.getInstance(getProject()).buildInitialFoldings(myFixture.editor);
|
||||
myFixture.doHighlighting()
|
||||
|
||||
assert myFixture.editor.foldingModel.getCollapsedRegionAtOffset(10)
|
||||
|
||||
myFixture.type 'import '
|
||||
@@ -48,5 +46,24 @@ class Foo { List a; Map b; }
|
||||
assert !myFixture.editor.foldingModel.getCollapsedRegionAtOffset(10)
|
||||
}
|
||||
|
||||
|
||||
public void testJavadocLikeClassHeader() {
|
||||
def text = """\
|
||||
/**
|
||||
* This is a header to collapse
|
||||
*/
|
||||
import java.util.*;
|
||||
class Foo { List a; Map b; }
|
||||
"""
|
||||
configure text
|
||||
def foldRegion = myFixture.editor.foldingModel.getCollapsedRegionAtOffset(0)
|
||||
assert foldRegion
|
||||
assertEquals 0, foldRegion.startOffset
|
||||
assertEquals text.indexOf("import") - 1, foldRegion.endOffset
|
||||
}
|
||||
|
||||
private def configure(String text) {
|
||||
myFixture.configureByText("a.java", text)
|
||||
CodeFoldingManagerImpl.getInstance(getProject()).buildInitialFoldings(myFixture.editor);
|
||||
myFixture.doHighlighting()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user