This is an automated email from the ASF dual-hosted git repository.
chrizzly pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 2b0b934ed8 #4447 - Fix missing code folding blocks in java editor for
conditions, loops and try/catch
2b0b934ed8 is described below
commit 2b0b934ed8d5f777119db145a3b91c03f917ddb2
Author: Chris <[email protected]>
AuthorDate: Fri Jul 29 16:18:34 2022 +0200
#4447 - Fix missing code folding blocks in java editor for conditions,
loops and try/catch
The motivation about this was to implement those missing folding blocks in
java editor. This was just implemented for imports, classes, inner classes,
methods but not for stuff inside methods like if/else if/else, try/catch and
loops because all of them are treated like code blocks.
Also introducing code-block fold type for specific code parts and separate
from method fold type for customization. Add missing implementation of new
method for method folding and add method folding to deprecated Java Editor lib
as requested. Map the code block to the method block for deprecated Java Editor
Lib
---
.../editor/base/fold/JavaElementFoldVisitor.java | 25 +++++++++++++++++++---
.../netbeans/editor/ext/java/JavaFoldManager.java | 10 +++++++--
.../java/editor/fold/JavaElementFoldManager.java | 11 +++++++++-
.../java/editor/fold/JavaFoldTypeProvider.java | 1 +
.../server/protocol/TextDocumentServiceImpl.java | 7 +++++-
5 files changed, 47 insertions(+), 7 deletions(-)
diff --git
a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/fold/JavaElementFoldVisitor.java
b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/fold/JavaElementFoldVisitor.java
index d4f2d583c3..44fb59754c 100644
---
a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/fold/JavaElementFoldVisitor.java
+++
b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/fold/JavaElementFoldVisitor.java
@@ -32,6 +32,7 @@ import com.sun.source.tree.ImportTree;
import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.Tree;
+import com.sun.source.tree.Tree.Kind;
import com.sun.source.tree.VariableTree;
import com.sun.source.util.SourcePositions;
import com.sun.source.util.TreePath;
@@ -170,8 +171,24 @@ public final class JavaElementFoldVisitor<T> extends
CancellableTreePathScanner<
@Override
public Object visitMethod(MethodTree node, Object p) {
- super.visitMethod(node, p);
- handleTree((int)sp.getStartPosition(cu, node), node.getBody(), node,
false);
+ super.visitMethod(node, Boolean.TRUE);
+
+ try {
+ if (p == Boolean.TRUE) {
+ int start = Utilities.findBodyStart(info, node, cu, sp, doc);
+ int end = (int)sp.getEndPosition(cu, node);
+
+ if (start != (-1) && start < end) {
+ addFold(creator.createMethodFold(start, end),
(int)sp.getStartPosition(cu, node));
+ }
+ }
+
+ handleJavadoc(node);
+ } catch (BadLocationException | ConcurrentModificationException e) {
+ //the document probably changed, stop
+ stopped = true;
+ }
+
return null;
}
@@ -213,7 +230,8 @@ public final class JavaElementFoldVisitor<T> extends
CancellableTreePathScanner<
//check static/dynamic initializer:
TreePath path = getCurrentPath();
- if
(TreeUtilities.CLASS_TREE_KINDS.contains(path.getParentPath().getLeaf().getKind()))
{
+ if
(TreeUtilities.CLASS_TREE_KINDS.contains(path.getParentPath().getLeaf().getKind())
||
+ !Kind.METHOD.equals(path.getParentPath().getLeaf().getKind())) {
handleTree(node, null, false);
}
@@ -308,6 +326,7 @@ public final class JavaElementFoldVisitor<T> extends
CancellableTreePathScanner<
T createImportsFold(int start, int end);
T createInnerClassFold(int start, int end);
+ T createMethodFold(int start, int end);
T createCodeBlockFold(int start, int end);
T createJavadocFold(int start, int end);
T createInitialCommentFold(int start, int end);
diff --git
a/java/java.editor.lib/src/org/netbeans/editor/ext/java/JavaFoldManager.java
b/java/java.editor.lib/src/org/netbeans/editor/ext/java/JavaFoldManager.java
index fec70aac9d..4143b13717 100644
--- a/java/java.editor.lib/src/org/netbeans/editor/ext/java/JavaFoldManager.java
+++ b/java/java.editor.lib/src/org/netbeans/editor/ext/java/JavaFoldManager.java
@@ -42,7 +42,9 @@ public abstract class JavaFoldManager implements FoldManager {
public static final FoldType JAVADOC_FOLD_TYPE =
JavaElementFoldManager.JAVADOC_FOLD_TYPE;
- public static final FoldType CODE_BLOCK_FOLD_TYPE =
JavaElementFoldManager.CODE_BLOCK_FOLD_TYPE;
+ public static final FoldType CODE_BLOCK_FOLD_TYPE =
JavaElementFoldManager.METHOD_BLOCK_FOLD_TYPE;
+
+ public static final FoldType METHOD_BLOCK_FOLD_TYPE =
JavaElementFoldManager.METHOD_BLOCK_FOLD_TYPE;
public static final FoldType INNERCLASS_TYPE =
JavaElementFoldManager.INNERCLASS_TYPE;
@@ -68,7 +70,11 @@ public abstract class JavaFoldManager implements FoldManager
{
@Deprecated
public static final FoldTemplate CODE_BLOCK_FOLD_TEMPLATE
- = new FoldTemplate(CODE_BLOCK_FOLD_TYPE, CODE_BLOCK_FOLD_DESCRIPTION,
1, 1);
+ = new FoldTemplate(CODE_BLOCK_FOLD_TYPE,
CODE_BLOCK_FOLD_DESCRIPTION, 1, 1);
+
+ @Deprecated
+ public static final FoldTemplate METHOD_BLOCK_FOLD_TEMPLATE
+ = new FoldTemplate(METHOD_BLOCK_FOLD_TYPE,
CODE_BLOCK_FOLD_DESCRIPTION, 1, 1);
@Deprecated
public static final FoldTemplate INNER_CLASS_FOLD_TEMPLATE
diff --git
a/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaElementFoldManager.java
b/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaElementFoldManager.java
index 08a7f4c539..53ba9dfebb 100644
---
a/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaElementFoldManager.java
+++
b/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaElementFoldManager.java
@@ -76,7 +76,11 @@ public class JavaElementFoldManager implements FoldManager {
new org.netbeans.api.editor.fold.FoldTemplate(3, 2, "/**...*/"));
// NOI18N
@NbBundle.Messages("FoldType_Methods=Methods")
- public static final FoldType CODE_BLOCK_FOLD_TYPE =
FoldType.MEMBER.derive("method", Bundle.FoldType_Methods(),
+ public static final FoldType METHOD_BLOCK_FOLD_TYPE =
FoldType.MEMBER.derive("method", Bundle.FoldType_Methods(),
+ new org.netbeans.api.editor.fold.FoldTemplate(1, 1, "{...}")); //
NOI18N
+
+ @NbBundle.Messages("FoldType_CodeBlocks=Code Blocks")
+ public static final FoldType CODE_BLOCK_FOLD_TYPE =
FoldType.CODE_BLOCK.derive("code-block", Bundle.FoldType_CodeBlocks(),
new org.netbeans.api.editor.fold.FoldTemplate(1, 1, "{...}")); //
NOI18N
@NbBundle.Messages("FoldType_InnerClasses=Inner Classes")
@@ -273,6 +277,11 @@ public class JavaElementFoldManager implements FoldManager
{
return FoldInfo.range(start, end, INNERCLASS_TYPE);
}
+ @Override
+ public FoldInfo createMethodFold(int start, int end) {
+ return FoldInfo.range(start, end, METHOD_BLOCK_FOLD_TYPE);
+ }
+
@Override
public FoldInfo createCodeBlockFold(int start, int end) {
return FoldInfo.range(start, end, CODE_BLOCK_FOLD_TYPE);
diff --git
a/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaFoldTypeProvider.java
b/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaFoldTypeProvider.java
index afc0c37b6e..36ddddd1e5 100644
---
a/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaFoldTypeProvider.java
+++
b/java/java.editor/src/org/netbeans/modules/java/editor/fold/JavaFoldTypeProvider.java
@@ -37,6 +37,7 @@ public class JavaFoldTypeProvider implements FoldTypeProvider
{
public JavaFoldTypeProvider() {
types.add(JavaElementFoldManager.CODE_BLOCK_FOLD_TYPE);
types.add(JavaElementFoldManager.INNERCLASS_TYPE);
+ types.add(JavaElementFoldManager.METHOD_BLOCK_FOLD_TYPE);
types.add(JavaElementFoldManager.IMPORTS_FOLD_TYPE);
types.add(JavaElementFoldManager.JAVADOC_FOLD_TYPE);
types.add(JavaElementFoldManager.INITIAL_COMMENT_FOLD_TYPE);
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
index ba2f9db63c..b268541495 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
@@ -1510,11 +1510,16 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
public FoldingRange createInnerClassFold(int start, int
end) {
return createFold(start, end, FoldingRangeKind.Region);
}
-
+
@Override
public FoldingRange createCodeBlockFold(int start, int
end) {
return createFold(start, end, FoldingRangeKind.Region);
}
+
+ @Override
+ public FoldingRange createMethodFold(int start, int end) {
+ return createFold(start, end, FoldingRangeKind.Region);
+ }
@Override
public FoldingRange createJavadocFold(int start, int end) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists