forked from oracle/javavscode
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path8484.diff
More file actions
135 lines (133 loc) · 6.97 KB
/
8484.diff
File metadata and controls
135 lines (133 loc) · 6.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
diff --git a/ide/editor.document/src/org/netbeans/api/editor/document/LineDocumentUtils.java b/ide/editor.document/src/org/netbeans/api/editor/document/LineDocumentUtils.java
index 5fb34c754a..247dda8b82 100644
--- a/ide/editor.document/src/org/netbeans/api/editor/document/LineDocumentUtils.java
+++ b/ide/editor.document/src/org/netbeans/api/editor/document/LineDocumentUtils.java
@@ -30,7 +30,6 @@ import org.netbeans.lib.editor.util.swing.DocumentUtilities;
import org.netbeans.modules.editor.document.DocumentServices;
import org.netbeans.modules.editor.document.TextSearchUtils;
import org.netbeans.modules.editor.document.implspi.CharClassifier;
-import org.netbeans.modules.editor.lib2.AcceptorFactory;
import org.netbeans.spi.editor.document.DocumentFactory;
import org.openide.util.Lookup;
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
index 0e44783168..3202b2ac97 100644
--- a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
@@ -2565,7 +2565,36 @@ public class Reformatter implements ReformatTask {
StatementTree elseStat = node.getElseStatement();
CodeStyle.BracesGenerationStyle redundantIfBraces = cs.redundantIfBraces();
int eoln = findNewlineAfterStatement(node);
- if ((elseStat != null && redundantIfBraces == CodeStyle.BracesGenerationStyle.ELIMINATE && danglingElseChecker.hasDanglingElse(node.getThenStatement())) ||
+ Boolean hasErrThenStatement = node.getThenStatement() instanceof ExpressionStatementTree thenStatement
+ && thenStatement.getExpression() instanceof ErroneousTree;
+ if (hasErrThenStatement) {
+ if (getCurrentPath().getParentPath().getLeaf() instanceof BlockTree parentStTree) {
+ boolean isPreviousIfTree = false;
+ int endPositionOfErrThenStatement = endPos;
+ for (StatementTree statement : parentStTree.getStatements()) {
+ if (isPreviousIfTree) {
+ int startPositionOfNextErrorStatement = (int) sp.getStartPosition(getCurrentPath().getCompilationUnit(), statement);
+ endPositionOfErrThenStatement = startPositionOfNextErrorStatement;
+ break;
+ } else if (statement == node) {
+ isPreviousIfTree = true;
+ endPositionOfErrThenStatement = (int) sp.getEndPosition(getCurrentPath().getCompilationUnit(), parentStTree) - 1;
+ }
+
+ }
+ if (isPreviousIfTree) {
+ while (tokens.offset() <= endPositionOfErrThenStatement && endPositionOfErrThenStatement != -1) {
+ tokens.moveNext();
+ }
+ tokens.movePrevious();
+ if (endPositionOfErrThenStatement != -1) {
+ endPos = endPositionOfErrThenStatement;
+ }
+ }
+ }
+ }
+
+ if (hasErrThenStatement || (elseStat != null && redundantIfBraces == CodeStyle.BracesGenerationStyle.ELIMINATE && danglingElseChecker.hasDanglingElse(node.getThenStatement())) ||
(redundantIfBraces == CodeStyle.BracesGenerationStyle.GENERATE && (startOffset > sp.getStartPosition(root, node) || endOffset < eoln || node.getCondition().getKind() == Tree.Kind.ERRONEOUS))) {
redundantIfBraces = CodeStyle.BracesGenerationStyle.LEAVE_ALONE;
}
diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
index 8797b9111b..d5962a9ba3 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
@@ -1556,6 +1556,76 @@ public class FormatingTest extends NbTestCase {
preferences.putBoolean("specialElseIf", false);
reformat(doc, content, golden);
preferences.putBoolean("specialElseIf", true);
+
+ content = """
+ package hierbas.del.litoral;
+ class Test extends Integer implements Runnable, Serializable{
+ public void run(){
+ if ("foo".contains("bar"))))) ))) {
+ System.out.println("bar");
+ }
+ }
+ }
+ """;
+ golden = """
+ package hierbas.del.litoral;
+
+ class Test extends Integer implements Runnable, Serializable {
+
+ public void run() {
+ if ("foo".contains("bar"))))) ))) {
+ System.out.println("bar");
+ }
+ }
+ }
+ """;
+ reformat(doc, content, golden);
+
+ content = """
+ package hierbas.del.litoral;
+ class Test extends Integer implements Runnable, Serializable{
+ public void run(){
+ if ("foo".contains("bar"))))) )))
+ }
+ }
+ """;
+ golden = """
+ package hierbas.del.litoral;
+
+ class Test extends Integer implements Runnable, Serializable {
+
+ public void run() {
+ if ("foo".contains("bar"))))) )))
+ }
+ }
+ """;
+ reformat(doc, content, golden);
+
+ content = """
+ package hierbas.del.litoral;
+ class Test extends Integer implements Runnable, Serializable{
+ public void run(){
+ if ("foo".contains("bar"))))) )))
+ else {
+ System.out.println("bar2")
+ }
+ }
+ }
+ """;
+ golden = """
+ package hierbas.del.litoral;
+
+ class Test extends Integer implements Runnable, Serializable {
+
+ public void run() {
+ if ("foo".contains("bar"))))) )))
+ else {
+ System.out.println("bar2")
+ }
+ }
+ }
+ """;
+ reformat(doc, content, golden);
}
public void testWhile() throws Exception {