You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2022/07/28 23:23:54 UTC

[royale-compiler] branch develop updated: formatter: create FormatterSettings object to configure ASTokenFormatter and MXMLTokenFormatter

This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6c5fdf62b formatter: create FormatterSettings object to configure ASTokenFormatter and MXMLTokenFormatter
6c5fdf62b is described below

commit 6c5fdf62b016eb33225a8548b9000cf9b3756aa6
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Thu Jul 28 16:23:05 2022 -0700

    formatter: create FormatterSettings object to configure ASTokenFormatter and MXMLTokenFormatter
    
    Also move ASTokenFormatter and MXMLTokenFormatter out of internal package so that they can be used directly
---
 .../formatter/{internal => }/ASTokenFormatter.java | 62 +++++++++++-----------
 .../org/apache/royale/formatter/FORMATTER.java     | 46 ++++++++++++----
 .../apache/royale/formatter/FormatterSettings.java | 42 +++++++++++++++
 .../{internal => }/MXMLTokenFormatter.java         | 26 ++++-----
 .../formatter/internal/BaseTokenFormatter.java     | 16 +++---
 5 files changed, 130 insertions(+), 62 deletions(-)

diff --git a/formatter/src/main/java/org/apache/royale/formatter/internal/ASTokenFormatter.java b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
similarity index 95%
rename from formatter/src/main/java/org/apache/royale/formatter/internal/ASTokenFormatter.java
rename to formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
index 97c0b18f4..b3848c28c 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/internal/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -17,7 +17,7 @@
 //
 ////////////////////////////////////////////////////////////////////////////////
 
-package org.apache.royale.formatter.internal;
+package org.apache.royale.formatter;
 
 import java.io.StringReader;
 import java.util.ArrayList;
@@ -42,8 +42,8 @@ import org.apache.royale.compiler.internal.workspaces.Workspace;
 import org.apache.royale.compiler.parsing.IASToken;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.UnexpectedExceptionProblem;
-import org.apache.royale.formatter.FORMATTER;
 import org.apache.royale.formatter.config.Semicolons;
+import org.apache.royale.formatter.internal.BaseTokenFormatter;
 
 public class ASTokenFormatter extends BaseTokenFormatter {
 	private static final int TOKEN_TYPE_EXTRA = 999999;
@@ -51,8 +51,8 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 	private static final String FORMATTER_TAG_OFF = "@formatter:off";
 	private static final String FORMATTER_TAG_ON = "@formatter:on";
 
-	public ASTokenFormatter(FORMATTER formatter) {
-		super(formatter);
+	public ASTokenFormatter(FormatterSettings settings) {
+		super(settings);
 	}
 
 	private int indent;
@@ -104,7 +104,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 			problems.addAll(tokenizer.getTokenizationProblems());
 		}
 
-		if (!formatter.ignoreProblems && hasErrors(problems)) {
+		if (!settings.ignoreProblems && hasErrors(problems)) {
 			return text;
 		}
 
@@ -142,7 +142,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 			problems.addAll(parser.getSyntaxProblems());
 		}
 
-		if (!formatter.ignoreProblems && hasErrors(problems)) {
+		if (!settings.ignoreProblems && hasErrors(problems)) {
 			return text;
 		}
 
@@ -229,7 +229,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 						}
 						boolean oneLineBlock = prevToken != null && prevToken.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN
 								&& nextToken != null && nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-						if (oneLineBlock && formatter.collapseEmptyBlocks) {
+						if (oneLineBlock && settings.collapseEmptyBlocks) {
 							newLinesInExtra = 0;
 						}
 						numRequiredNewLines = Math.max(numRequiredNewLines, newLinesInExtra);
@@ -291,11 +291,11 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 							}
 							boolean oneLineBlock = nextToken != null
 									&& nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-							boolean needsNewLine = formatter.placeOpenBraceOnNewLine && (!formatter.collapseEmptyBlocks || !oneLineBlock);
+							boolean needsNewLine = settings.placeOpenBraceOnNewLine && (!settings.collapseEmptyBlocks || !oneLineBlock);
 							if (needsNewLine) {
 								numRequiredNewLines = Math.max(numRequiredNewLines, 1);
 							} else {
-								if (oneLineBlock && formatter.collapseEmptyBlocks) {
+								if (oneLineBlock && settings.collapseEmptyBlocks) {
 									numRequiredNewLines = 0;
 								}
 								requiredSpace = true;
@@ -315,7 +315,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 							if (stackItem.blockDepth <= 1) {
 								boolean oneLineBlock = prevToken != null
 										&& prevToken.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN;
-								if (!formatter.collapseEmptyBlocks || !oneLineBlock) {
+								if (!settings.collapseEmptyBlocks || !oneLineBlock) {
 									indent = decreaseIndent(indent);
 								}
 								if (stackItem.token.getType() == ASTokenTypes.TOKEN_KEYWORD_CASE
@@ -402,7 +402,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_BITWISE_XOR_ASSIGNMENT:
 					case ASTokenTypes.TOKEN_OPERATOR_LOGICAL_AND_ASSIGNMENT:
 					case ASTokenTypes.TOKEN_OPERATOR_LOGICAL_OR_ASSIGNMENT: {
-						if (formatter.insertSpaceBeforeAndAfterBinaryOperators) {
+						if (settings.insertSpaceBeforeAndAfterBinaryOperators) {
 							requiredSpace = true;
 						}
 						break;
@@ -410,7 +410,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_STAR: {
 						boolean isAnyType = checkTokenBeforeAnyType(prevTokenNotComment);
 						boolean isAnyVectorType = checkTokensForAnyVectorType(prevTokenNotComment, nextTokenNotComment);
-						if (!isAnyType && !isAnyVectorType && formatter.insertSpaceBeforeAndAfterBinaryOperators
+						if (!isAnyType && !isAnyVectorType && settings.insertSpaceBeforeAndAfterBinaryOperators
 								&& !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
@@ -419,21 +419,21 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_PLUS:
 					case ASTokenTypes.TOKEN_OPERATOR_MINUS: {
 						boolean isUnary = checkTokenBeforeUnaryOperator(prevTokenNotComment);
-						if (!isUnary && formatter.insertSpaceBeforeAndAfterBinaryOperators) {
+						if (!isUnary && settings.insertSpaceBeforeAndAfterBinaryOperators) {
 							requiredSpace = true;
 						}
 						break;
 					}
 					case ASTokenTypes.TOKEN_OPERATOR_ASSIGNMENT: {
 						inVarOrConstDeclaration = false;
-						if (formatter.insertSpaceBeforeAndAfterBinaryOperators) {
+						if (settings.insertSpaceBeforeAndAfterBinaryOperators) {
 							requiredSpace = true;
 						}
 						break;
 					}
 					case ASTokenTypes.TOKEN_OPERATOR_TERNARY: {
 						ternaryStack++;
-						if (formatter.insertSpaceBeforeAndAfterBinaryOperators) {
+						if (settings.insertSpaceBeforeAndAfterBinaryOperators) {
 							requiredSpace = true;
 						}
 						break;
@@ -509,7 +509,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					if (blockOpenPending) {
 						boolean oneLineBlock = nextToken != null
 								&& nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-						if (formatter.placeOpenBraceOnNewLine && (!formatter.collapseEmptyBlocks || !oneLineBlock)) {
+						if (settings.placeOpenBraceOnNewLine && (!settings.collapseEmptyBlocks || !oneLineBlock)) {
 							indent = increaseIndent(indent);
 						}
 					}
@@ -540,7 +540,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 				switch (token.getType()) {
 					case ASTokenTypes.TOKEN_SEMICOLON: {
 						if (inControlFlowStatement && isInForStatement(blockStack)) {
-							if (formatter.insertSpaceAfterSemicolonInForStatements) {
+							if (settings.insertSpaceAfterSemicolonInForStatements) {
 								requiredSpace = true;
 							}
 							// else no space
@@ -582,8 +582,8 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 							}
 							boolean oneLineBlock = nextToken != null
 									&& nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-							if (!formatter.collapseEmptyBlocks || !oneLineBlock) {
-								if (!formatter.placeOpenBraceOnNewLine) {
+							if (!settings.collapseEmptyBlocks || !oneLineBlock) {
+								if (!settings.placeOpenBraceOnNewLine) {
 									indent = increaseIndent(indent);
 								}
 								numRequiredNewLines = Math.max(numRequiredNewLines, 1);
@@ -683,7 +683,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_KEYWORD_FUNCTION: {
 						blockStack.add(new BlockStackItem(token));
 						inFunctionDeclaration = true;
-						boolean skipSpace = !formatter.insertSpaceAfterFunctionKeywordForAnonymousFunctions
+						boolean skipSpace = !settings.insertSpaceAfterFunctionKeywordForAnonymousFunctions
 								&& (nextToken != null && nextToken.getType() == ASTokenTypes.TOKEN_PAREN_OPEN);
 						if (!skipSpace) {
 							requiredSpace = true;
@@ -704,7 +704,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_KEYWORD_WITH: {
 						inControlFlowStatement = true;
 						blockStack.add(new BlockStackItem(token));
-						if (formatter.insertSpaceAfterKeywordsInControlFlowStatements && !skipWhitespaceBeforeSemicolon) {
+						if (settings.insertSpaceAfterKeywordsInControlFlowStatements && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
 						break;
@@ -712,7 +712,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_KEYWORD_SWITCH: {
 						inControlFlowStatement = true;
 						blockStack.add(new SwitchBlockStackItem(token));
-						if (formatter.insertSpaceAfterKeywordsInControlFlowStatements && !skipWhitespaceBeforeSemicolon) {
+						if (settings.insertSpaceAfterKeywordsInControlFlowStatements && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
 						break;
@@ -876,7 +876,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_BITWISE_XOR_ASSIGNMENT:
 					case ASTokenTypes.TOKEN_OPERATOR_LOGICAL_AND_ASSIGNMENT:
 					case ASTokenTypes.TOKEN_OPERATOR_LOGICAL_OR_ASSIGNMENT: {
-						if (formatter.insertSpaceBeforeAndAfterBinaryOperators && !skipWhitespaceBeforeSemicolon) {
+						if (settings.insertSpaceBeforeAndAfterBinaryOperators && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
 						break;
@@ -884,7 +884,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_STAR: {
 						boolean isAnyType = checkTokenBeforeAnyType(prevTokenNotComment);
 						boolean isAnyVectorType = checkTokensForAnyVectorType(prevTokenNotComment, nextTokenNotComment);
-						if (!isAnyType && !isAnyVectorType && formatter.insertSpaceBeforeAndAfterBinaryOperators
+						if (!isAnyType && !isAnyVectorType && settings.insertSpaceBeforeAndAfterBinaryOperators
 								&& !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
@@ -893,7 +893,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					case ASTokenTypes.TOKEN_OPERATOR_PLUS:
 					case ASTokenTypes.TOKEN_OPERATOR_MINUS: {
 						boolean isUnary = checkTokenBeforeUnaryOperator(prevTokenNotComment);
-						if (!isUnary && formatter.insertSpaceBeforeAndAfterBinaryOperators && !skipWhitespaceBeforeSemicolon) {
+						if (!isUnary && settings.insertSpaceBeforeAndAfterBinaryOperators && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
 						break;
@@ -902,7 +902,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 						if (varOrConstChainLevel == blockStack.size()) {
 							inVarOrConstDeclaration = true;
 						}
-						if (formatter.insertSpaceAfterCommaDelimiter && !skipWhitespaceBeforeSemicolon) {
+						if (settings.insertSpaceAfterCommaDelimiter && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
 						break;
@@ -1006,8 +1006,8 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 					if (skipFormatting) {
 						return token.isImplicit() ? "" : token.getText();
 					}
-					boolean skipSemicolon = Semicolons.REMOVE.equals(formatter.semicolons)
-							|| (Semicolons.IGNORE.equals(formatter.semicolons) && token.isImplicit());
+					boolean skipSemicolon = Semicolons.REMOVE.equals(settings.semicolons)
+							|| (Semicolons.IGNORE.equals(settings.semicolons) && token.isImplicit());
 					if (!skipSemicolon) {
 						return token.getText();
 					}
@@ -1047,7 +1047,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 				case MetadataTokenTypes.TOKEN_ATTR_OPERATOR_NS_QUALIFIER: {
 					if (needsComma) {
 						builder.append(",");
-						if (formatter.insertSpaceBetweenMetadataAttributes) {
+						if (settings.insertSpaceBetweenMetadataAttributes) {
 							builder.append(" ");
 						}
 					}
@@ -1066,7 +1066,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 				case MetadataTokenTypes.TOKEN_STRING: {
 					if (needsComma) {
 						builder.append(",");
-						if (formatter.insertSpaceBetweenMetadataAttributes) {
+						if (settings.insertSpaceBetweenMetadataAttributes) {
 							builder.append(" ");
 						}
 					}
@@ -1088,7 +1088,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
 		comment = comment.substring(2).trim();
 		StringBuilder builder = new StringBuilder();
 		builder.append("//");
-		if (formatter.insertSpaceAtStartOfLineComment) {
+		if (settings.insertSpaceAtStartOfLineComment) {
 			builder.append(" ");
 		}
 		builder.append(comment);
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 469b08b61..e6ad9be4b 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -49,8 +49,6 @@ import org.apache.royale.formatter.config.ConfigurationBuffer;
 import org.apache.royale.formatter.config.ConfigurationValue;
 import org.apache.royale.formatter.config.Configurator;
 import org.apache.royale.formatter.config.Semicolons;
-import org.apache.royale.formatter.internal.ASTokenFormatter;
-import org.apache.royale.formatter.internal.MXMLTokenFormatter;
 import org.apache.royale.utils.FilenameNormalization;
 
 /**
@@ -199,11 +197,9 @@ public class FORMATTER {
 		filePath = FilenameNormalization.normalize(filePath);
 		String result = null;
 		if (filePath.endsWith(".mxml")) {
-			MXMLTokenFormatter mxmlFormatter = new MXMLTokenFormatter(this);
-			result = mxmlFormatter.format(filePath, text, problems);
+			result = formatMXMLTokens(filePath, text, problems);
 		} else {
-			ASTokenFormatter asFormatter = new ASTokenFormatter(this);
-			result = asFormatter.format(filePath, text, problems);
+			result = formatASTokens(filePath, text, problems);
 		}
 		if (insertFinalNewLine && result.charAt(result.length() - 1) != '\n') {
 			return result + '\n';
@@ -217,8 +213,7 @@ public class FORMATTER {
 
 	public String formatActionScriptText(String text, Collection<ICompilerProblem> problems) {
 		String filePath = FilenameNormalization.normalize("stdin.as");
-		ASTokenFormatter asFormatter = new ASTokenFormatter(this);
-		return asFormatter.format(filePath, text, problems);
+		return formatASTokens(filePath, text, problems);
 	}
 
 	public String formatActionScriptText(String text) {
@@ -227,14 +222,45 @@ public class FORMATTER {
 
 	public String formatMXMLText(String text, Collection<ICompilerProblem> problems) {
 		String filePath = FilenameNormalization.normalize("stdin.mxml");
-		MXMLTokenFormatter mxmlFormatter = new MXMLTokenFormatter(this);
-		return mxmlFormatter.format(filePath, text, problems);
+		return formatMXMLTokens(filePath, text, problems);
 	}
 
 	public String formatMXMLText(String text) {
 		return formatMXMLText(text, null);
 	}
 
+	private String formatASTokens(String filePath, String text, Collection<ICompilerProblem> problems) {
+		ASTokenFormatter asFormatter = new ASTokenFormatter(getFormatterSettings());
+		return asFormatter.format(filePath, text, problems);
+	}
+
+	private String formatMXMLTokens(String filePath, String text, Collection<ICompilerProblem> problems) {
+		MXMLTokenFormatter mxmlFormatter = new MXMLTokenFormatter(getFormatterSettings());
+		return mxmlFormatter.format(filePath, text, problems);
+	}
+
+	private FormatterSettings getFormatterSettings() {
+		FormatterSettings result = new FormatterSettings();
+		result.tabSize = tabSize;
+		result.insertSpaces = insertSpaces;
+		result.insertFinalNewLine = insertFinalNewLine;
+		result.placeOpenBraceOnNewLine = placeOpenBraceOnNewLine;
+		result.insertSpaceAfterSemicolonInForStatements = insertSpaceAfterSemicolonInForStatements;
+		result.insertSpaceAfterKeywordsInControlFlowStatements = insertSpaceAfterKeywordsInControlFlowStatements;
+		result.insertSpaceAfterFunctionKeywordForAnonymousFunctions = insertSpaceAfterFunctionKeywordForAnonymousFunctions;
+		result.insertSpaceBeforeAndAfterBinaryOperators = insertSpaceBeforeAndAfterBinaryOperators;
+		result.insertSpaceAfterCommaDelimiter = insertSpaceAfterCommaDelimiter;
+		result.insertSpaceBetweenMetadataAttributes = insertSpaceBetweenMetadataAttributes;
+		result.insertSpaceAtStartOfLineComment = insertSpaceAtStartOfLineComment;
+		result.maxPreserveNewLines = maxPreserveNewLines;
+		result.semicolons = semicolons;
+		result.ignoreProblems = ignoreProblems;
+		result.collapseEmptyBlocks = collapseEmptyBlocks;
+		result.mxmlAlignAttributes = mxmlAlignAttributes;
+		result.mxmlInsertNewLineBetweenAttributes = mxmlInsertNewLineBetweenAttributes;
+		return result;
+	}
+
 	/**
 	 * Get the start up message that contains the program name with the copyright
 	 * notice.
diff --git a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
new file mode 100644
index 000000000..c083f01c3
--- /dev/null
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.royale.formatter;
+
+import org.apache.royale.formatter.config.Semicolons;
+
+public class FormatterSettings {
+	public int tabSize = 4;
+	public boolean insertSpaces = false;
+	public boolean insertFinalNewLine = false;
+	public boolean placeOpenBraceOnNewLine = true;
+	public boolean insertSpaceAfterSemicolonInForStatements = true;
+	public boolean insertSpaceAfterKeywordsInControlFlowStatements = true;
+	public boolean insertSpaceAfterFunctionKeywordForAnonymousFunctions = false;
+	public boolean insertSpaceBeforeAndAfterBinaryOperators = true;
+	public boolean insertSpaceAfterCommaDelimiter = true;
+	public boolean insertSpaceBetweenMetadataAttributes = true;
+	public boolean insertSpaceAtStartOfLineComment = true;
+	public int maxPreserveNewLines = 2;
+	public Semicolons semicolons = Semicolons.INSERT;
+	public boolean ignoreProblems = false;
+	public boolean collapseEmptyBlocks = false;
+	public boolean mxmlAlignAttributes = false;
+	public boolean mxmlInsertNewLineBetweenAttributes = false;
+}
diff --git a/formatter/src/main/java/org/apache/royale/formatter/internal/MXMLTokenFormatter.java b/formatter/src/main/java/org/apache/royale/formatter/MXMLTokenFormatter.java
similarity index 96%
rename from formatter/src/main/java/org/apache/royale/formatter/internal/MXMLTokenFormatter.java
rename to formatter/src/main/java/org/apache/royale/formatter/MXMLTokenFormatter.java
index 662a3b798..a0b5dccd6 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/internal/MXMLTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/MXMLTokenFormatter.java
@@ -17,7 +17,7 @@
 //
 ////////////////////////////////////////////////////////////////////////////////
 
-package org.apache.royale.formatter.internal;
+package org.apache.royale.formatter;
 
 import java.io.StringReader;
 import java.util.ArrayList;
@@ -33,7 +33,7 @@ import org.apache.royale.compiler.parsing.IMXMLToken;
 import org.apache.royale.compiler.parsing.MXMLTokenTypes;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.UnexpectedExceptionProblem;
-import org.apache.royale.formatter.FORMATTER;
+import org.apache.royale.formatter.internal.BaseTokenFormatter;
 
 public class MXMLTokenFormatter extends BaseTokenFormatter {
 	private static final int TOKEN_TYPE_EXTRA = 999999;
@@ -41,8 +41,8 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 	private static final String FORMATTER_TAG_OFF = "@formatter:off";
 	private static final String FORMATTER_TAG_ON = "@formatter:on";
 
-	public MXMLTokenFormatter(FORMATTER formatter) {
-		super(formatter);
+	public MXMLTokenFormatter(FormatterSettings settings) {
+		super(settings);
 	}
 
 	private int indent;
@@ -77,7 +77,7 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 			problems.addAll(mxmlTokenizer.getTokenizationProblems());
 		}
 
-		if (!formatter.ignoreProblems && hasErrors(problems)) {
+		if (!settings.ignoreProblems && hasErrors(problems)) {
 			return text;
 		}
 
@@ -302,7 +302,7 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 					break;
 				}
 				case MXMLTokenTypes.TOKEN_STRING: {
-					if (inOpenTag && formatter.mxmlInsertNewLineBetweenAttributes && nextToken != null
+					if (inOpenTag && settings.mxmlInsertNewLineBetweenAttributes && nextToken != null
 							&& nextToken.getType() != MXMLTokenTypes.TOKEN_TAG_END
 							&& nextToken.getType() != MXMLTokenTypes.TOKEN_EMPTY_TAG_END) {
 						numRequiredNewLines = Math.max(numRequiredNewLines, 1);
@@ -331,9 +331,9 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 	private String formatMXMLScriptElement(String filePath, int line, String text,
 			Collection<ICompilerProblem> problems) {
 		String indent = "\t";
-		if (formatter.insertSpaces) {
+		if (settings.insertSpaces) {
 			indent = "";
-			for (int i = 0; i < formatter.tabSize; i++) {
+			for (int i = 0; i < settings.tabSize; i++) {
 				indent += " ";
 			}
 		}
@@ -354,9 +354,9 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 		String cdataText = scriptMatcher.group(3);
 		String scriptText = scriptMatcher.group(4);
 		boolean requireCdata = cdataText != null || "Script".equals(scriptTagName);
-		ASTokenFormatter asFormatter = new ASTokenFormatter(formatter);
+		ASTokenFormatter asFormatter = new ASTokenFormatter(settings);
 		String formattedScriptText = asFormatter.format(filePath + "@Script[" + line + "]", scriptText, problems);
-		if (!formatter.ignoreProblems && hasErrors(problems)) {
+		if (!settings.ignoreProblems && hasErrors(problems)) {
 			return text;
 		}
 		if (formattedScriptText.length() > 0) {
@@ -443,14 +443,14 @@ public class MXMLTokenFormatter extends BaseTokenFormatter {
 	}
 
 	private String getAttributeIndent(IMXMLToken openTagToken) {
-		if (!formatter.mxmlAlignAttributes) {
+		if (!settings.mxmlAlignAttributes) {
 			return getIndent();
 		}
 		int indentSize = openTagToken.getText().length() + 1;
 		String result = "";
-		while (indentSize >= formatter.tabSize) {
+		while (indentSize >= settings.tabSize) {
 			result += getIndent();
-			indentSize -= formatter.tabSize;
+			indentSize -= settings.tabSize;
 		}
 		for (int i = 0; i < indentSize; i++) {
 			result += " ";
diff --git a/formatter/src/main/java/org/apache/royale/formatter/internal/BaseTokenFormatter.java b/formatter/src/main/java/org/apache/royale/formatter/internal/BaseTokenFormatter.java
index 158f64237..1ad662cfd 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/internal/BaseTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/internal/BaseTokenFormatter.java
@@ -24,13 +24,13 @@ import java.util.Collection;
 import org.apache.royale.compiler.clients.problems.CompilerProblemCategorizer;
 import org.apache.royale.compiler.problems.CompilerProblemSeverity;
 import org.apache.royale.compiler.problems.ICompilerProblem;
-import org.apache.royale.formatter.FORMATTER;
+import org.apache.royale.formatter.FormatterSettings;
 
 public abstract class BaseTokenFormatter {
-	protected FORMATTER formatter;
+	protected FormatterSettings settings;
 
-	protected BaseTokenFormatter(FORMATTER formatter) {
-		this.formatter = formatter;
+	protected BaseTokenFormatter(FormatterSettings settings) {
+		this.settings = settings;
 	}
 
 	protected boolean hasErrors(Collection<ICompilerProblem> problems) {
@@ -53,9 +53,9 @@ public abstract class BaseTokenFormatter {
 	}
 
 	protected String getIndent() {
-		if (formatter.insertSpaces) {
+		if (settings.insertSpaces) {
 			String result = "";
-			for (int j = 0; j < formatter.tabSize; j++) {
+			for (int j = 0; j < settings.tabSize; j++) {
 				result += " ";
 			}
 			return result;
@@ -71,8 +71,8 @@ public abstract class BaseTokenFormatter {
 	}
 
 	protected void appendNewLines(StringBuilder builder, int numRequiredNewLines) {
-		if (formatter.maxPreserveNewLines != 0) {
-			numRequiredNewLines = Math.min(formatter.maxPreserveNewLines, numRequiredNewLines);
+		if (settings.maxPreserveNewLines != 0) {
+			numRequiredNewLines = Math.min(settings.maxPreserveNewLines, numRequiredNewLines);
 		}
 		for (int j = 0; j < numRequiredNewLines; j++) {
 			builder.append('\n');