formatter: case or default that contains only a block does not increase indent of block
diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index 473ff7c..fc36d09 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -91,11 +91,10 @@
}
final int code;
-
- int getCode()
- {
- return code;
- }
+
+ int getCode() {
+ return code;
+ }
}
/**
@@ -393,7 +392,8 @@
}
}
- private String formatMXMLScriptElement(String filePath, int line, String text, Collection<ICompilerProblem> problems) {
+ private String formatMXMLScriptElement(String filePath, int line, String text,
+ Collection<ICompilerProblem> problems) {
String indent = "\t";
if (insertSpaces) {
indent = "";
@@ -761,7 +761,8 @@
indentedStatement = false;
indent = decreaseIndent(indent);
}
- boolean oneLineBlock = nextToken != null && nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
+ boolean oneLineBlock = nextToken != null
+ && nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
boolean needsNewLine = placeOpenBraceOnNewLine && (!collapseEmptyBlocks || !oneLineBlock);
if (needsNewLine) {
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
@@ -1238,7 +1239,22 @@
if (inCaseOrDefaultClause) {
inCaseOrDefaultClause = false;
caseOrDefaultBlockOpenPending = true;
- indent = increaseIndent(indent);
+ boolean nextIsBlock = nextTokenNotComment != null
+ && nextTokenNotComment.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN;
+ if (nextIsBlock) {
+ IASToken afterBlockClose = findTokenAfterBlock(nextTokenNotComment, tokens);
+ if (afterBlockClose != null) {
+ if (afterBlockClose.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE
+ || afterBlockClose.getType() == ASTokenTypes.TOKEN_KEYWORD_CASE
+ || afterBlockClose.getType() == ASTokenTypes.TOKEN_KEYWORD_DEFAULT) {
+ blockOpenPending = true;
+ blockStack.remove(blockStack.size() - 1);
+ }
+ }
+ }
+ if (!nextIsBlock || !blockOpenPending) {
+ indent = increaseIndent(indent);
+ }
if (nextToken != null && (nextToken
.getType() == ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
|| nextToken.getType() == ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT)) {
@@ -1408,6 +1424,23 @@
return builder.toString();
}
+ private IASToken findTokenAfterBlock(IASToken tokenBlockOpen, List<IASToken> tokens) {
+ List<IASToken> stack = new ArrayList<IASToken>();
+ int startIndex = tokens.indexOf(tokenBlockOpen) + 1;
+ for (int i = startIndex; i < tokens.size(); i++) {
+ IASToken current = tokens.get(i);
+ if (current.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN) {
+ stack.add(current);
+ } else if (current.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE) {
+ if (stack.size() == 0) {
+ return getNextTokenSkipExtraAndComments(tokens, i + 1);
+ }
+ stack.remove(stack.size() - 1);
+ }
+ }
+ return null;
+ }
+
private int countNewLinesInExtra(IASToken tokenOrExtra) {
if (tokenOrExtra == null || tokenOrExtra.getType() != TOKEN_TYPE_EXTRA) {
return 0;
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
index dffb116..d7cd956 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
@@ -146,8 +146,8 @@
"switch (condition)\n" +
"{\n" +
"\tcase condition:\n" +
- "\t\t{\n" +
- "\t\t}\n" +
+ "\t{\n" +
+ "\t}\n" +
"}",
// @formatter:on
result);
@@ -176,9 +176,9 @@
"switch (condition)\n" +
"{\n" +
"\tcase condition:\n" +
- "\t\t{\n" +
- "\t\t\tbreak;\n" +
- "\t\t}\n" +
+ "\t{\n" +
+ "\t\tbreak;\n" +
+ "\t}\n" +
"}",
// @formatter:on
result);
@@ -295,8 +295,8 @@
"switch (condition)\n" +
"{\n" +
"\tdefault:\n" +
- "\t\t{\n" +
- "\t\t}\n" +
+ "\t{\n" +
+ "\t}\n" +
"}",
// @formatter:on
result);
@@ -325,9 +325,9 @@
"switch (condition)\n" +
"{\n" +
"\tdefault:\n" +
- "\t\t{\n" +
- "\t\t\tbreak;\n" +
- "\t\t}\n" +
+ "\t{\n" +
+ "\t\tbreak;\n" +
+ "\t}\n" +
"}",
// @formatter:on
result);
@@ -549,8 +549,8 @@
"\tswitch (condition)\n" +
"\t{\n" +
"\t\tcase clause:\n" +
- "\t\t\t{\n" +
- "\t\t\t}\n" +
+ "\t\t{\n" +
+ "\t\t}\n" +
"\t}\n" +
"\tstatement;\n" +
"}",
@@ -585,9 +585,9 @@
"\tswitch (condition)\n" +
"\t{\n" +
"\t\tcase clause:\n" +
- "\t\t\t{\n" +
- "\t\t\t\tbreak;\n" +
- "\t\t\t}\n" +
+ "\t\t{\n" +
+ "\t\t\tbreak;\n" +
+ "\t\t}\n" +
"\t}\n" +
"\tstatement;\n" +
"}",
@@ -654,8 +654,8 @@
"\tswitch (condition)\n" +
"\t{\n" +
"\t\tdefault:\n" +
- "\t\t\t{\n" +
- "\t\t\t}\n" +
+ "\t\t{\n" +
+ "\t\t}\n" +
"\t}\n" +
"\tstatement;\n" +
"}",
@@ -690,9 +690,9 @@
"\tswitch (condition)\n" +
"\t{\n" +
"\t\tdefault:\n" +
- "\t\t\t{\n" +
- "\t\t\t\tbreak;\n" +
- "\t\t\t}\n" +
+ "\t\t{\n" +
+ "\t\t\tbreak;\n" +
+ "\t\t}\n" +
"\t}\n" +
"\tstatement;\n" +
"}",