Skip to content
Snippets Groups Projects
Commit 221e6182 authored by Johannes Mey's avatar Johannes Mey
Browse files

Merge branch 'feature/foldable-aspects' into 'develop'

Resolve "Foldable aspects"

Closes #4

See merge request !4
parents 225ffd0a 6466df9a
No related branches found
No related tags found
1 merge request!4Resolve "Foldable aspects"
Pipeline #12023 passed
......@@ -8,6 +8,8 @@
- Note that although it works in the Java embeddings within aspects, it does *not* work in "real" Java classes.
- Please use this feature with caution. As with most refactoring tools, it is quite fragile and won't give correct
results in all cases.
- Folding support for aspect files.
- Aspects and most blocks now can be folded.
### Changed
......
......@@ -173,7 +173,7 @@ class_body_declaration ::= initializer | modifiers ( unmodified_class_declaratio
interface_declaration ::= unmodified_interface_declaration
unmodified_interface_declaration ::= INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE interface_member_declaration RBRACE
unmodified_interface_declaration ::= INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE interface_member_declaration* RBRACE
interface_member_declaration ::= modifiers (unmodified_class_declaration | unmodified_interface_declaration | field_declaration | method_declaration) | SEMICOLON
......
package org.jastadd.tooling.aspect;
import com.intellij.lang.ASTNode;
import com.intellij.lang.folding.FoldingBuilderEx;
import com.intellij.lang.folding.FoldingDescriptor;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.FoldingGroup;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import org.jastadd.tooling.aspect.psi.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class AspectFoldingBuilder extends FoldingBuilderEx {
@Override
public FoldingDescriptor @NotNull [] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
List<FoldingDescriptor> descriptors = new ArrayList<>();
Collection<JastAddAspectAspectDeclaration> aspectDeclarations = PsiTreeUtil.findChildrenOfType(root, JastAddAspectAspectDeclaration.class);
for (final JastAddAspectAspectDeclaration aspectDeclaration : aspectDeclarations) {
descriptors.add(new FoldingDescriptor(aspectDeclaration.getNode(),
new TextRange(aspectDeclaration.getAspectBody().getTextRange().getStartOffset() + 1,
aspectDeclaration.getAspectBody().getTextRange().getEndOffset() - 1)));
}
Collection<JastAddAspectClassDeclaration> classDeclarations = PsiTreeUtil.findChildrenOfType(root, JastAddAspectClassDeclaration.class);
for (final JastAddAspectClassDeclaration classDeclaration : classDeclarations) {
descriptors.add(new FoldingDescriptor(classDeclaration.getNode(),
new TextRange(classDeclaration.getClassBody().getTextRange().getStartOffset() + 1,
classDeclaration.getClassBody().getTextRange().getEndOffset() - 1)));
}
Collection<JastAddAspectEnumBody> enumBodies = PsiTreeUtil.findChildrenOfType(root, JastAddAspectEnumBody.class);
for (final JastAddAspectEnumBody enumBody : enumBodies) {
descriptors.add(new FoldingDescriptor(enumBody.getNode(),
new TextRange(enumBody.getTextRange().getStartOffset() + 1,
enumBody.getTextRange().getEndOffset() - 1)));
}
Collection<JastAddAspectAnnotationTypeBody> annotationTypeBodies = PsiTreeUtil.findChildrenOfType(root, JastAddAspectAnnotationTypeBody.class);
for (final JastAddAspectAnnotationTypeBody annotationTypeBody : annotationTypeBodies) {
descriptors.add(new FoldingDescriptor(annotationTypeBody.getNode(),
new TextRange(annotationTypeBody.getTextRange().getStartOffset() + 1,
annotationTypeBody.getTextRange().getEndOffset() - 1)));
}
Collection<JastAddAspectBlock> aspectBlocks = PsiTreeUtil.findChildrenOfType(root, JastAddAspectBlock.class);
for (final JastAddAspectBlock block : aspectBlocks) {
descriptors.add(new FoldingDescriptor(block.getNode(),
new TextRange(block.getTextRange().getStartOffset() + 1,
block.getTextRange().getEndOffset() - 1)));
}
return descriptors.toArray(new FoldingDescriptor[0]);
}
@Nullable
@Override
public String getPlaceholderText(@NotNull ASTNode node) {
return " ... ";
}
@Override
public boolean isCollapsedByDefault(@NotNull ASTNode node) {
return false;
}
}
......@@ -89,6 +89,9 @@
implementationClass="org.jastadd.tooling.aspect.psi.JastAddAspectClassOrInterfaceTypeManipulator"/>
<lang.formatter language="JastAddAspect" implementationClass="org.jastadd.tooling.aspect.AspectFormattingModelBuilder"/>
<lang.foldingBuilder language="JastAddAspect" implementationClass="org.jastadd.tooling.aspect.AspectFoldingBuilder"/>
FoldingBuilder"/>
</extensions>
<actions>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment