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/11/15 17:55:59 UTC

[royale-compiler] branch develop updated (f04e9788b -> 2e643d2c8)

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

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


    from f04e9788b linter: more tests
     new 861d8098e linter: null reference checks
     new f8d280353 NodeBase: avoid null reference exceptions when getting file scope or workspace
     new 5b4b3bbdf FunctionNode: avoid null reference exception if workspace is null for package level function
     new fd6ab58cc linter: tests for rest of rules
     new b5307405b formatter: tests shouldn't use deprecated APIs
     new 2e643d2c8 formatter: a few more tests

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../compiler/internal/tree/as/FunctionNode.java    |  10 +-
 .../royale/compiler/internal/tree/as/NodeBase.java |   9 +-
 .../royale/formatter/BaseFormatterTests.java       |   1 -
 .../royale/formatter/TestArithmeticOperators.java  |  90 ++++--
 .../apache/royale/formatter/TestArrayLiteral.java  |  81 +++--
 .../apache/royale/formatter/TestAsDocComment.java  |  88 +++---
 .../formatter/TestAutomaticSemicolonInsertion.java |   9 +-
 .../royale/formatter/TestBitwiseOperators.java     | 117 +++++---
 .../royale/formatter/TestBreakStatement.java       |  55 ++--
 .../royale/formatter/TestClassDeclaration.java     | 110 +++----
 .../royale/formatter/TestComparisonOperators.java  |  73 +++--
 .../royale/formatter/TestConstDeclaration.java     |  33 ++-
 .../royale/formatter/TestContinueStatement.java    |  56 ++--
 .../royale/formatter/TestDecrementOperator.java    |  22 +-
 .../TestDefaultXMLNamespaceDirective.java          |  11 +-
 .../royale/formatter/TestDeleteOperator.java       |  11 +-
 .../royale/formatter/TestDoWhileStatement.java     | 154 +++++-----
 .../royale/formatter/TestElseIfStatement.java      | 176 ++++++-----
 .../apache/royale/formatter/TestElseStatement.java | 187 ++++++------
 .../royale/formatter/TestFieldDeclaration.java     |  77 ++---
 .../royale/formatter/TestForEachStatement.java     | 143 +++++----
 .../royale/formatter/TestForInStatement.java       | 143 +++++----
 .../apache/royale/formatter/TestForStatement.java  | 154 +++++-----
 .../apache/royale/formatter/TestFormatterOff.java  |  30 +-
 .../royale/formatter/TestFunctionDeclaration.java  | 154 +++++-----
 .../apache/royale/formatter/TestIdentifier.java    | 126 +++++---
 .../apache/royale/formatter/TestIfStatement.java   | 198 +++++++------
 .../royale/formatter/TestImportDirective.java      |  31 +-
 .../royale/formatter/TestIncludeDirective.java     |  11 +-
 .../royale/formatter/TestIncrementOperator.java    |  22 +-
 .../royale/formatter/TestInterfaceDeclaration.java | 110 +++----
 .../royale/formatter/TestLogicalOperators.java     |  45 ++-
 .../apache/royale/formatter/TestMXMLMetadata.java  |  35 ++-
 .../apache/royale/formatter/TestMXMLScript.java    |  21 +-
 .../org/apache/royale/formatter/TestMXMLTag.java   | 103 ++++---
 .../org/apache/royale/formatter/TestMetadata.java  | 110 +++----
 .../royale/formatter/TestMethodDeclaration.java    |  57 ++--
 .../formatter/TestMiscellaneousOperators.java      |  14 +-
 .../royale/formatter/TestMultiLineComment.java     |  57 ++--
 .../apache/royale/formatter/TestNewStatement.java  |  44 +--
 .../apache/royale/formatter/TestNumberLiteral.java | 129 +++++++-
 .../apache/royale/formatter/TestObjectLiteral.java |  63 ++--
 .../royale/formatter/TestPackageDeclaration.java   |  66 +++--
 .../royale/formatter/TestPreserveNewLines.java     |  27 +-
 .../org/apache/royale/formatter/TestRegExp.java    |  13 +-
 .../royale/formatter/TestReturnStatement.java      |  56 ++--
 .../royale/formatter/TestSingleLineComment.java    | 106 ++++---
 .../apache/royale/formatter/TestStringLiteral.java |  66 +++--
 .../royale/formatter/TestSwitchStatement.java      | 330 +++++++++++----------
 .../royale/formatter/TestTernaryStatement.java     |  33 ++-
 .../royale/formatter/TestThrowStatement.java       |  61 ++--
 .../royale/formatter/TestTryCatchStatement.java    |  77 ++---
 .../formatter/TestUseNamespaceDirective.java       |  11 +-
 .../royale/formatter/TestVariableDeclaration.java  |  66 +++--
 .../royale/formatter/TestWhileStatement.java       | 143 +++++----
 .../java/org/apache/royale/formatter/TestXML.java  |  27 +-
 .../java/org/apache/royale/linter/MXMLLinter.java  |  23 +-
 ...ssRule.java => TestMXMLEmptyAttributeRule.java} |  22 +-
 ...qualityRule.java => TestMaxBlockDepthRule.java} |  39 ++-
 ...qualityRule.java => TestMaxParametersRule.java} |  39 ++-
 ...tionNameRule.java => TestMissingASDocRule.java} | 155 ++++++----
 ...e.java => TestMissingConstructorSuperRule.java} |  16 +-
 ...NameRule.java => TestMissingNamespaceRule.java} | 110 ++++---
 ...WithRule.java => TestMissingSemicolonRule.java} |  14 +-
 ...lidTypeofRule.java => TestMissingTypeRule.java} |  67 +++--
 65 files changed, 2749 insertions(+), 1988 deletions(-)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestNoDynamicClassRule.java => TestMXMLEmptyAttributeRule.java} (75%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestStrictEqualityRule.java => TestMaxBlockDepthRule.java} (71%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestStrictEqualityRule.java => TestMaxParametersRule.java} (70%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestFunctionNameRule.java => TestMissingASDocRule.java} (53%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestNoDynamicClassRule.java => TestMissingConstructorSuperRule.java} (77%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestPackageNameRule.java => TestMissingNamespaceRule.java} (53%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestNoWithRule.java => TestMissingSemicolonRule.java} (86%)
 copy linter/src/test/java/org/apache/royale/linter/rules/{TestValidTypeofRule.java => TestMissingTypeRule.java} (66%)


[royale-compiler] 04/06: linter: tests for rest of rules

Posted by jo...@apache.org.
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

commit fd6ab58cc20bf171fd8e8e58ca5fdfd11db9646a
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 13:15:18 2022 -0700

    linter: tests for rest of rules
---
 .../linter/rules/TestMXMLEmptyAttributeRule.java   |  59 +++++
 .../royale/linter/rules/TestMaxBlockDepthRule.java |  91 ++++++++
 .../royale/linter/rules/TestMaxParametersRule.java |  91 ++++++++
 .../royale/linter/rules/TestMissingASDocRule.java  | 250 +++++++++++++++++++++
 .../rules/TestMissingConstructorSuperRule.java     |  59 +++++
 .../linter/rules/TestMissingNamespaceRule.java     | 184 +++++++++++++++
 .../linter/rules/TestMissingSemicolonRule.java     |  47 ++++
 .../royale/linter/rules/TestMissingTypeRule.java   | 134 +++++++++++
 8 files changed, 915 insertions(+)

diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMXMLEmptyAttributeRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMXMLEmptyAttributeRule.java
new file mode 100644
index 000000000..7da6188a9
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMXMLEmptyAttributeRule.java
@@ -0,0 +1,59 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.apache.royale.linter.MXMLLinter;
+import org.junit.Test;
+
+public class TestMXMLEmptyAttributeRule {
+	@Test
+	public void testMXMLAttributeNotEmpty() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MXMLEmptyAttributeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		MXMLLinter linter = new MXMLLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.mxml", "<fx:Object attr=\"value\"/>", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMXMLAttributeEmpty() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MXMLEmptyAttributeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		MXMLLinter linter = new MXMLLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.mxml", "<fx:Object attr=\"\"/>", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MXMLEmptyAttributeRule.MXMLEmptyAttributeLinterProblem);
+	}
+}
\ No newline at end of file
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMaxBlockDepthRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMaxBlockDepthRule.java
new file mode 100644
index 000000000..eeb286e15
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMaxBlockDepthRule.java
@@ -0,0 +1,91 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.ASLinter;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.junit.Test;
+
+public class TestMaxBlockDepthRule {
+	@Test
+	public void testZeroBlocks() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxBlockDepthRule rule = new MaxBlockDepthRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction():void{}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testLessThanMaxBlockDepth() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxBlockDepthRule rule = new MaxBlockDepthRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction():void{if(true){}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testEqualToMaxBlockDepth() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxBlockDepthRule rule = new MaxBlockDepthRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction():void{if(true){while(true){}}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMoreThanMaxBlockDepth() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxBlockDepthRule rule = new MaxBlockDepthRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction():void{if(true){while(true){for(;;){}}}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MaxBlockDepthRule.MaxBlockDepthLinterProblem);
+	}
+}
\ No newline at end of file
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMaxParametersRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMaxParametersRule.java
new file mode 100644
index 000000000..3da0048ed
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMaxParametersRule.java
@@ -0,0 +1,91 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.ASLinter;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.junit.Test;
+
+public class TestMaxParametersRule {
+	@Test
+	public void testZeroParameters() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxParametersRule rule = new MaxParametersRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction():void {}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testLessThanMaxParameter() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxParametersRule rule = new MaxParametersRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction(param1:String):void {}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testEqualToMaxParameters() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxParametersRule rule = new MaxParametersRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction(param1:String, param2:Number):void {}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMoreThanMaxParameters() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		MaxParametersRule rule = new MaxParametersRule();
+		rule.maximum = 2;
+		rules.add(rule);
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "function myFunction(param1:String, param2:Number, param3:Boolean):void {}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MaxParametersRule.MaxParametersLinterProblem);
+	}
+}
\ No newline at end of file
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMissingASDocRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingASDocRule.java
new file mode 100644
index 000000000..cf94e0ba4
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingASDocRule.java
@@ -0,0 +1,250 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.ASLinter;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.junit.Test;
+
+public class TestMissingASDocRule {
+	@Test
+	public void testClassWithASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** hello */ public class MyClass{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testClassMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testClassEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** */ public class MyClass{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+
+	@Test
+	public void testInterfaceWithASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** hello */ public interface MyClass{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testInterfaceMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public interface MyClass{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testInterfaceEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** */ public interface MyClass{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+
+	@Test
+	public void testFieldWithASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{/** hello */public var myVar:String;}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testFieldMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{public var myVar:String;}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testFieldEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{/** */public var myVar:String;}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+
+	@Test
+	public void testMethodWithASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{/** hello */public function myMethod():void{}}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMethodMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{public function myMethod():void{}}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testMethodEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** class */ public class MyClass{/** */public function myMethod():void{}}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+
+	@Test
+	public void testPackageVariableWithASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** hello */ public var myVar:String;}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testPackageVariableMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public var myVar:String;}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testPackageVariableEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** */ public var myVar:String;}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+
+	@Test
+	public void testPackageFunctionMissingASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public function myFunction():void{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.MissingASDocLinterProblem);
+	}
+
+	@Test
+	public void testPackageFunctionEmptyASDoc() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingASDocRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{/** */ public function myFunction():void{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingASDocRule.EmptyASDocLinterProblem);
+	}
+}
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMissingConstructorSuperRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingConstructorSuperRule.java
new file mode 100644
index 000000000..2f04121c8
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingConstructorSuperRule.java
@@ -0,0 +1,59 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.ASLinter;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.junit.Test;
+
+public class TestMissingConstructorSuperRule {
+	@Test
+	public void testWithConstructorSuper() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingConstructorSuperRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{class MyClass extends OtherClass{public function MyClass(){super();}}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingConstructorSuper() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingConstructorSuperRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{class MyClass extends OtherClass{public function MyClass(){}}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingConstructorSuperRule.MissingConstructorSuperLinterProblem);
+	}
+}
\ No newline at end of file
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMissingNamespaceRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingNamespaceRule.java
new file mode 100644
index 000000000..b1466a6a3
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingNamespaceRule.java
@@ -0,0 +1,184 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.ASLinter;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.junit.Test;
+
+public class TestMissingNamespaceRule {
+	@Test
+	public void testWithClassNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingClassNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{class MyClass{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnClassLinterProblem);
+	}
+
+	@Test
+	public void testWithInterfaceNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public interface MyInterface{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingInterfaceNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{interface MyInterface{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnInterfaceLinterProblem);
+	}
+
+	@Test
+	public void testWithFieldNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{private var myField:String;}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingFieldNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{var myField:String;}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnFieldLinterProblem);
+	}
+
+	@Test
+	public void testWithMethodNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{private function myMethod():void{}}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingMethodNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public class MyClass{function myMethod():void{}}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnMethodLinterProblem);
+	}
+
+	@Test
+	public void testWithPackageVarNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public var myVar:String;}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingPackageVarNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{var myVar:String;}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnPackageVariableLinterProblem);
+	}
+
+	@Test
+	public void testWithPackageFunctionNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{public function myFunction():void{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingPackageFunctionNamespace() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingNamespaceRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "package{function myFunction():void{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingNamespaceRule.MissingNamespaceOnPackageFunctionLinterProblem);
+	}
+}
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMissingSemicolonRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingSemicolonRule.java
new file mode 100644
index 000000000..2dcbf2c33
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingSemicolonRule.java
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.apache.royale.linter.ASLinter;
+import org.junit.Test;
+
+public class TestMissingSemicolonRule {
+	@Test
+	public void testMissingSemicolon() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingSemicolonRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "var s:String", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingSemicolonRule.MissingSemicolonLinterProblem);
+	}
+}
diff --git a/linter/src/test/java/org/apache/royale/linter/rules/TestMissingTypeRule.java b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingTypeRule.java
new file mode 100644
index 000000000..5aa0d212f
--- /dev/null
+++ b/linter/src/test/java/org/apache/royale/linter/rules/TestMissingTypeRule.java
@@ -0,0 +1,134 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.linter.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.royale.compiler.problems.ICompilerProblem;
+import org.apache.royale.linter.LinterRule;
+import org.apache.royale.linter.LinterSettings;
+import org.apache.royale.linter.ASLinter;
+import org.junit.Test;
+
+public class TestMissingTypeRule {
+	@Test
+	public void testWithFieldType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{var fieldName:String;}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingFieldType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{var fieldName;}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingTypeRule.MissingVariableTypeLinterProblem);
+	}
+
+	@Test
+	public void testWithLocalVarType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName():void{var fieldName:String;}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingLocalVarType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName():void{var fieldName;}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingTypeRule.MissingVariableTypeLinterProblem);
+	}
+
+	@Test
+	public void testWithParameterType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName(param:String):void{}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingParameterType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName(param):void{}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingTypeRule.MissingFunctionParameterTypeLinterProblem);
+	}
+
+	@Test
+	public void testWithReturnType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName():String{return null;}}", problems);
+		assertEquals(0, problems.size());
+	}
+
+	@Test
+	public void testMissingReturnType() {
+		List<LinterRule> rules = new ArrayList<LinterRule>();
+		rules.add(new MissingTypeRule());
+		LinterSettings settings = new LinterSettings();
+		settings.rules = rules;
+		ASLinter linter = new ASLinter(settings);
+		List<ICompilerProblem> problems = new ArrayList<ICompilerProblem>();
+		linter.lint("file.as", "class MyClass{function methodName(){}}", problems);
+		assertEquals(1, problems.size());
+		assertTrue(problems.get(0) instanceof MissingTypeRule.MissingFunctionReturnTypeLinterProblem);
+	}
+}
\ No newline at end of file


[royale-compiler] 06/06: formatter: a few more tests

Posted by jo...@apache.org.
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

commit 2e643d2c8d18de64d1a1d922ba09123621fed06f
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 15:15:47 2022 -0700

    formatter: a few more tests
---
 .../royale/formatter/TestImportDirective.java      |  20 ++++
 .../apache/royale/formatter/TestNumberLiteral.java | 102 ++++++++++++++++++++-
 .../org/apache/royale/formatter/TestRegExp.java    |   4 +-
 3 files changed, 123 insertions(+), 3 deletions(-)

diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java b/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
index eb988f93b..fd702cc06 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
@@ -43,4 +43,24 @@ public class TestImportDirective extends BaseFormatterTests {
 				// @formatter:on
 				result);
 	}
+
+	@Test
+	public void testWildcard() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"import com.example.*;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"import com.example.*;",
+				// @formatter:on
+				result);
+	}
 }
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java b/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
index 544ec463c..cb3d00a01 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
@@ -44,6 +44,26 @@ public class TestNumberLiteral extends BaseFormatterTests {
 				result);
 	}
 
+	@Test
+	public void testNegativeFloat() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"-123.4;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"-123.4;",
+				// @formatter:on
+				result);
+	}
+
 	@Test
 	public void testInt() {
 		FormatterSettings settings = new FormatterSettings();
@@ -65,7 +85,7 @@ public class TestNumberLiteral extends BaseFormatterTests {
 	}
 
 	@Test
-	public void testNegative() {
+	public void testNegativeInt() {
 		FormatterSettings settings = new FormatterSettings();
 		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
 		settings.placeOpenBraceOnNewLine = false;
@@ -83,4 +103,84 @@ public class TestNumberLiteral extends BaseFormatterTests {
 				// @formatter:on
 				result);
 	}
+
+	@Test
+	public void testHexadecimal() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"0xfe1c23;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"0xfe1c23;",
+				// @formatter:on
+				result);
+	}
+
+	@Test
+	public void testNegativeHexadecimal() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"-0xfe1c23;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"-0xfe1c23;",
+				// @formatter:on
+				result);
+	}
+
+	@Test
+	public void testExponential() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"1.234e5;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"1.234e5;",
+				// @formatter:on
+				result);
+	}
+
+	@Test
+	public void testNegativeExponential() {
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
+		// @formatter:off
+			"1.234e-5;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"1.234e-5;",
+				// @formatter:on
+				result);
+	}
 }
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java b/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
index cba6c2c66..f959b6b69 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
@@ -33,13 +33,13 @@ public class TestRegExp extends BaseFormatterTests {
 		ASTokenFormatter formatter = new ASTokenFormatter(settings);
 		String result = formatter.format("file.as",
 		// @formatter:off
-			"/\\d/g;",
+			"/\\d+[a-z0-9]{1,2}/g;",
 			// @formatter:on
 			problems
 		);
 		assertEquals(
 		// @formatter:off
-				"/\\d/g;",
+				"/\\d+[a-z0-9]{1,2}/g;",
 				// @formatter:on
 				result);
 	}


[royale-compiler] 03/06: FunctionNode: avoid null reference exception if workspace is null for package level function

Posted by jo...@apache.org.
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

commit 5b4b3bbdff5c62c205d80d6c3be4b15720e34939
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 10:04:12 2022 -0700

    FunctionNode: avoid null reference exception if workspace is null for package level function
---
 .../apache/royale/compiler/internal/tree/as/FunctionNode.java  | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/FunctionNode.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/FunctionNode.java
index 1a5bf1063..6ed897051 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/FunctionNode.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/FunctionNode.java
@@ -480,11 +480,17 @@ public class FunctionNode extends BaseTypedDefinitionNode implements IFunctionNo
         String qualifiedName = null;
         if (isPackageLevelFunction())
         {
-            IImportTarget importTarget = ASImportTarget.buildImportFromPackageName(getWorkspace(), getPackageName());
-            qualifiedName = importTarget.getQualifiedName(getName());
+            IWorkspace workspace = getWorkspace();
+            if (workspace != null)
+            {
+                IImportTarget importTarget = ASImportTarget.buildImportFromPackageName(workspace, getPackageName());
+                qualifiedName = importTarget.getQualifiedName(getName());
+            }
         }
         if (qualifiedName == null)
+        {
             qualifiedName = getName();
+        }
         return qualifiedName;
     }
 


[royale-compiler] 02/06: NodeBase: avoid null reference exceptions when getting file scope or workspace

Posted by jo...@apache.org.
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

commit f8d2803533c60fccc577f07de78cc53e01c6e0e8
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 10:03:36 2022 -0700

    NodeBase: avoid null reference exceptions when getting file scope or workspace
---
 .../org/apache/royale/compiler/internal/tree/as/NodeBase.java    | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/NodeBase.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/NodeBase.java
index eef182f88..cac999b74 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/NodeBase.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/NodeBase.java
@@ -852,7 +852,7 @@ public abstract class NodeBase extends SourceLocation implements IASNode
     {
         ASScope scope = getASScope();
         assert scope != null;
-        while (!(scope instanceof ASFileScope))
+        while (scope != null && !(scope instanceof ASFileScope))
         {
             scope = scope.getContainingScope();
             assert scope != null;
@@ -880,7 +880,12 @@ public abstract class NodeBase extends SourceLocation implements IASNode
      */
     public IWorkspace getWorkspace()
     {
-        return getFileScope().getWorkspace();
+        ASFileScope fileScope = getFileScope();
+        if (fileScope == null)
+        {
+            return null;
+        }
+        return fileScope.getWorkspace();
     }
 
     /**


[royale-compiler] 05/06: formatter: tests shouldn't use deprecated APIs

Posted by jo...@apache.org.
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

commit b5307405b6bf76590e6df882731c6cd0d64edf11
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 15:00:28 2022 -0700

    formatter: tests shouldn't use deprecated APIs
---
 .../royale/formatter/BaseFormatterTests.java       |   1 -
 .../royale/formatter/TestArithmeticOperators.java  |  90 ++++--
 .../apache/royale/formatter/TestArrayLiteral.java  |  81 +++--
 .../apache/royale/formatter/TestAsDocComment.java  |  88 +++---
 .../formatter/TestAutomaticSemicolonInsertion.java |   9 +-
 .../royale/formatter/TestBitwiseOperators.java     | 117 +++++---
 .../royale/formatter/TestBreakStatement.java       |  55 ++--
 .../royale/formatter/TestClassDeclaration.java     | 110 +++----
 .../royale/formatter/TestComparisonOperators.java  |  73 +++--
 .../royale/formatter/TestConstDeclaration.java     |  33 ++-
 .../royale/formatter/TestContinueStatement.java    |  56 ++--
 .../royale/formatter/TestDecrementOperator.java    |  22 +-
 .../TestDefaultXMLNamespaceDirective.java          |  11 +-
 .../royale/formatter/TestDeleteOperator.java       |  11 +-
 .../royale/formatter/TestDoWhileStatement.java     | 154 +++++-----
 .../royale/formatter/TestElseIfStatement.java      | 176 ++++++-----
 .../apache/royale/formatter/TestElseStatement.java | 187 ++++++------
 .../royale/formatter/TestFieldDeclaration.java     |  77 ++---
 .../royale/formatter/TestForEachStatement.java     | 143 +++++----
 .../royale/formatter/TestForInStatement.java       | 143 +++++----
 .../apache/royale/formatter/TestForStatement.java  | 154 +++++-----
 .../apache/royale/formatter/TestFormatterOff.java  |  30 +-
 .../royale/formatter/TestFunctionDeclaration.java  | 154 +++++-----
 .../apache/royale/formatter/TestIdentifier.java    | 126 +++++---
 .../apache/royale/formatter/TestIfStatement.java   | 198 +++++++------
 .../royale/formatter/TestImportDirective.java      |  11 +-
 .../royale/formatter/TestIncludeDirective.java     |  11 +-
 .../royale/formatter/TestIncrementOperator.java    |  22 +-
 .../royale/formatter/TestInterfaceDeclaration.java | 110 +++----
 .../royale/formatter/TestLogicalOperators.java     |  45 ++-
 .../apache/royale/formatter/TestMXMLMetadata.java  |  35 ++-
 .../apache/royale/formatter/TestMXMLScript.java    |  21 +-
 .../org/apache/royale/formatter/TestMXMLTag.java   | 103 ++++---
 .../org/apache/royale/formatter/TestMetadata.java  | 110 +++----
 .../royale/formatter/TestMethodDeclaration.java    |  57 ++--
 .../formatter/TestMiscellaneousOperators.java      |  14 +-
 .../royale/formatter/TestMultiLineComment.java     |  57 ++--
 .../apache/royale/formatter/TestNewStatement.java  |  44 +--
 .../apache/royale/formatter/TestNumberLiteral.java |  27 +-
 .../apache/royale/formatter/TestObjectLiteral.java |  63 ++--
 .../royale/formatter/TestPackageDeclaration.java   |  66 +++--
 .../royale/formatter/TestPreserveNewLines.java     |  27 +-
 .../org/apache/royale/formatter/TestRegExp.java    |   9 +-
 .../royale/formatter/TestReturnStatement.java      |  56 ++--
 .../royale/formatter/TestSingleLineComment.java    | 106 ++++---
 .../apache/royale/formatter/TestStringLiteral.java |  66 +++--
 .../royale/formatter/TestSwitchStatement.java      | 330 +++++++++++----------
 .../royale/formatter/TestTernaryStatement.java     |  33 ++-
 .../royale/formatter/TestThrowStatement.java       |  61 ++--
 .../royale/formatter/TestTryCatchStatement.java    |  77 ++---
 .../formatter/TestUseNamespaceDirective.java       |  11 +-
 .../royale/formatter/TestVariableDeclaration.java  |  66 +++--
 .../royale/formatter/TestWhileStatement.java       | 143 +++++----
 .../java/org/apache/royale/formatter/TestXML.java  |  27 +-
 54 files changed, 2324 insertions(+), 1783 deletions(-)

diff --git a/formatter/src/test/java/org/apache/royale/formatter/BaseFormatterTests.java b/formatter/src/test/java/org/apache/royale/formatter/BaseFormatterTests.java
index db1cc7dcb..3e8932f9b 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/BaseFormatterTests.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/BaseFormatterTests.java
@@ -19,7 +19,6 @@
 
 package org.apache.royale.formatter;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestArithmeticOperators.java b/formatter/src/test/java/org/apache/royale/formatter/TestArithmeticOperators.java
index 6a6e8fc32..65aef259a 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestArithmeticOperators.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestArithmeticOperators.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestArithmeticOperators extends BaseFormatterTests {
 	@Test
 	public void testAdditionOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a+b;",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testSubtractionOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a-b;",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testMultiplicationOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a*b;",
 			// @formatter:on
@@ -77,9 +86,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testDivisionOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a/b;",
 			// @formatter:on
@@ -94,9 +106,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testModuloOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a%b;",
 			// @formatter:on
@@ -111,9 +126,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 
 	@Test
 	public void testAdditionCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a+=b;",
 			// @formatter:on
@@ -128,9 +146,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testSubtractionCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a-=b;",
 			// @formatter:on
@@ -145,9 +166,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testMultiplicationCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a*=b;",
 			// @formatter:on
@@ -162,9 +186,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testDivisionCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a/=b;",
 			// @formatter:on
@@ -179,9 +206,12 @@ public class TestArithmeticOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testModuloCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a%=b;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java b/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
index 7197e9f51..68f130346 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestArrayLiteral extends BaseFormatterTests {
 	@Test
 	public void testEmpty() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [];",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testSingleNumberOnOneLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [123.4];",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleNumbersOnOneLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [123.4, 567.8, 901.2];",
 			// @formatter:on
@@ -77,9 +86,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleNumbersOnMultipleLines1() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [123.4, 567.8,\n" +
 			"\t901.2];\n" +
@@ -98,9 +110,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleNumbersOnMultipleLines2() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array =\n" +
 			"\t[\n" +
@@ -127,9 +142,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleStringsOnOneLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [\"abc\", \"hello world\", \"\"];",
 			// @formatter:on
@@ -144,9 +162,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testFunction() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [\n" +
 			"\tfunction():void {\n" + 
@@ -177,9 +198,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testObjectLiteral() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [\n" +
 			"\t{\n" + 
@@ -202,9 +226,12 @@ public class TestArrayLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array:Array = [\n" +
 			"\t[1, 2, 3],\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java b/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
index 4a6ec50bb..32f5517bc 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestAsDocComment.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestAsDocComment  extends BaseFormatterTests {
 	@Test
 	public void testOneLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/** This is a comment */",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testSpacesBeforeAsterisks() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/**\n" +
 			"* This is a comment\n" +
@@ -68,11 +70,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testBeforeClass() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/**\n" +
 			" * This is a comment\n" +
@@ -97,11 +100,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testBeforeClassInPackage() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package com.example\n" +
 			"{\n" +
@@ -132,11 +136,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testBeforeInterface() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/**\n" +
 			" * This is a comment\n" +
@@ -161,11 +166,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testBeforeField() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" + 
 			"{\n" +
@@ -192,11 +198,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 
 	@Test
 	public void testBeforeMethod() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" + 
 			"{\n" +
@@ -226,11 +233,12 @@ public class TestAsDocComment  extends BaseFormatterTests {
 	}
 	@Test
 	public void testListing() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/**\n" +
 			" * Description.\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestAutomaticSemicolonInsertion.java b/formatter/src/test/java/org/apache/royale/formatter/TestAutomaticSemicolonInsertion.java
index d82f1e8de..c8fb1822c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestAutomaticSemicolonInsertion.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestAutomaticSemicolonInsertion.java
@@ -27,9 +27,12 @@ public class TestAutomaticSemicolonInsertion extends BaseFormatterTests {
 	
 	@Test
 	public void testInvalid() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"identifier1 identifier2;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestBitwiseOperators.java b/formatter/src/test/java/org/apache/royale/formatter/TestBitwiseOperators.java
index be72e5893..3ce81a376 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestBitwiseOperators.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestBitwiseOperators.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestBitwiseOperators extends BaseFormatterTests {
 	@Test
 	public void testBitwiseNotOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"~a;",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseAndOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a&b;",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseOrOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a|b;",
 			// @formatter:on
@@ -77,9 +86,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseXorOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a^b;",
 			// @formatter:on
@@ -94,9 +106,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseLeftShiftOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a<<b;",
 			// @formatter:on
@@ -111,9 +126,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseRightShiftOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>>b;",
 			// @formatter:on
@@ -128,9 +146,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseRightUnsignedShiftOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>>>b;",
 			// @formatter:on
@@ -145,9 +166,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseAndCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a&=b;",
 			// @formatter:on
@@ -162,9 +186,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseOrCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a|=b;",
 			// @formatter:on
@@ -179,9 +206,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseXorCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a^=b;",
 			// @formatter:on
@@ -196,9 +226,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseLeftShiftCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a<<=b;",
 			// @formatter:on
@@ -213,9 +246,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseRightShiftCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>>=b;",
 			// @formatter:on
@@ -230,9 +266,12 @@ public class TestBitwiseOperators extends BaseFormatterTests {
 
 	@Test
 	public void testBitwiseRightUnsignedShiftCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>>>=b;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestBreakStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestBreakStatement.java
index b3e948710..f2d0219fe 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestBreakStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestBreakStatement.java
@@ -26,11 +26,12 @@ public class TestBreakStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutLabel() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"break;",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestBreakStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutLabelAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"break",
 			// @formatter:on
@@ -64,11 +66,12 @@ public class TestBreakStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabel() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"break label;",
 			// @formatter:on
@@ -83,11 +86,12 @@ public class TestBreakStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabelAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"break label",
 			// @formatter:on
@@ -102,11 +106,12 @@ public class TestBreakStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabelOnNextLineCausesAutomaticSemicolonInsertion() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"break\n" +
 			"label;",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestClassDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestClassDeclaration.java
index 8aa914e7e..a2416a5b5 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestClassDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestClassDeclaration.java
@@ -25,11 +25,12 @@ import org.junit.Test;
 public class TestClassDeclaration extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass {\n" +
 			"}",
@@ -47,11 +48,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"{\n" +
@@ -69,11 +71,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass {\n" +
 			"\tstatement;\n" +
@@ -93,11 +96,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"{\n" +
@@ -117,11 +121,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass {\n" +
 			"}",
@@ -137,11 +142,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtends() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass extends MyOtherClass {\n" +
 			"}",
@@ -159,11 +165,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtendsOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"\textends MyOtherClass {\n" +
@@ -183,11 +190,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testImplements() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass implements MyInterface {\n" +
 			"}",
@@ -205,11 +213,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testImplementsMultiple() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass implements MyInterface, MyOtherInterface {\n" +
 			"}",
@@ -227,11 +236,12 @@ public class TestClassDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtendsAndImplementsOnMultipleLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"\textends MyOtherClass\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestComparisonOperators.java b/formatter/src/test/java/org/apache/royale/formatter/TestComparisonOperators.java
index 6d0e7ce75..c015f72f0 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestComparisonOperators.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestComparisonOperators.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestComparisonOperators extends BaseFormatterTests {
 	@Test
 	public void testEqualityOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a==b;",
 			// @formatter:on
@@ -40,11 +43,15 @@ public class TestComparisonOperators extends BaseFormatterTests {
 				// @formatter:on
 				result);
 	}
+
 	@Test
 	public void testInqualityOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a!=b;",
 			// @formatter:on
@@ -59,9 +66,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 
 	@Test
 	public void testStrictEqualityOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a===b;",
 			// @formatter:on
@@ -75,9 +85,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 	}
 	@Test
 	public void testStrictInqualityOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a!==b;",
 			// @formatter:on
@@ -92,9 +105,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testGreaterThanOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>b;",
 			// @formatter:on
@@ -109,9 +125,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testLessThanOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a<b;",
 			// @formatter:on
@@ -126,9 +145,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testGreaterThanOrEqualOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a>=b;",
 			// @formatter:on
@@ -143,9 +165,12 @@ public class TestComparisonOperators extends BaseFormatterTests {
 	
 	@Test
 	public void testLessThanOrEqualOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a<=b;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestConstDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestConstDeclaration.java
index 5286fc65a..fbe5ca6b5 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestConstDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestConstDeclaration.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestConstDeclaration extends BaseFormatterTests {
 	@Test
 	public void testWithoutTypeAndWithoutInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"const myConst",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestConstDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithoutInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"const myConst:String",
 			// @formatter:on
@@ -64,11 +66,12 @@ public class TestConstDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"const myConst:Number = 123.4;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestContinueStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestContinueStatement.java
index 3a9d1c7b3..0fb4f46be 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestContinueStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestContinueStatement.java
@@ -24,14 +24,14 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 public class TestContinueStatement extends BaseFormatterTests {
-
 	@Test
 	public void testWithoutLabel() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"continue;",
 			// @formatter:on
@@ -46,11 +46,12 @@ public class TestContinueStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutLabelAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"continue",
 			// @formatter:on
@@ -65,11 +66,12 @@ public class TestContinueStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabel() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"continue label;",
 			// @formatter:on
@@ -84,11 +86,12 @@ public class TestContinueStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabelAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"continue label",
 			// @formatter:on
@@ -103,11 +106,12 @@ public class TestContinueStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithLabelOnNextLineCausesAutomaticSemicolonInsertion() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"continue\n" +
 			"label;",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestDecrementOperator.java b/formatter/src/test/java/org/apache/royale/formatter/TestDecrementOperator.java
index 718607cc1..9833495a9 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestDecrementOperator.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestDecrementOperator.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestDecrementOperator extends BaseFormatterTests {
 	@Test
 	public void testAfter() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"i--;",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestDecrementOperator extends BaseFormatterTests {
 
 	@Test
 	public void testBefore() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"--i;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestDefaultXMLNamespaceDirective.java b/formatter/src/test/java/org/apache/royale/formatter/TestDefaultXMLNamespaceDirective.java
index bf3e95bfb..a101b3a73 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestDefaultXMLNamespaceDirective.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestDefaultXMLNamespaceDirective.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestDefaultXMLNamespaceDirective extends BaseFormatterTests {
 	@Test
 	public void testDirective() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"default xml namespace = ns;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestDeleteOperator.java b/formatter/src/test/java/org/apache/royale/formatter/TestDeleteOperator.java
index fcddbe501..3fa40c754 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestDeleteOperator.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestDeleteOperator.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestDeleteOperator extends BaseFormatterTests {
 	@Test
 	public void testBefore() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"delete myVar;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestDoWhileStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestDoWhileStatement.java
index 1e3a5d443..3cd26e564 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestDoWhileStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestDoWhileStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestDoWhileStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do {\n" +
 			"}\n" +
@@ -49,11 +50,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 	}
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do\n" +
 			"{\n" +
@@ -73,11 +75,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do\n" +
 			"{\n" +
@@ -100,11 +103,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do\n" +
 			"{\n" +
@@ -127,11 +131,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do {\n" +
 			"\tstatement;\n" +
@@ -153,11 +158,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do\n" +
 			"{\n" +
@@ -179,11 +185,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do statement;\n" +
 			"while (true);",
@@ -201,11 +208,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do;\n" +
 			"while (true);",
@@ -222,11 +230,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tdo\n" +
@@ -253,11 +262,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tdo\n" +
@@ -282,11 +292,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tdo\n" +
@@ -315,11 +326,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tdo;\n" +
@@ -342,11 +354,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCommentBetweenTryStatementAndBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do // comment\n" +
 			"{\n" +
@@ -369,11 +382,12 @@ public class TestDoWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"do {\n" +
 			"}\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestElseIfStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestElseIfStatement.java
index af62b557d..c253f488b 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestElseIfStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestElseIfStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestElseIfStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"\tstatement;\n" +
@@ -55,11 +56,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1)\n" +
 			"{\n" +
@@ -84,11 +86,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyIfAndElseIfBlocks() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"}\n" +
@@ -111,11 +114,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyIfAndElseIfBlocks() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1)\n" +
 			"{\n" +
@@ -138,11 +142,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if(condition1)\n" +
 			"{\n" +
@@ -171,11 +176,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off		
 			"if (condition1)\n" +
 			"{\n" +
@@ -204,11 +210,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"\tstatement;\n" +
@@ -235,11 +242,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1)\n" +
 			"{\n" +
@@ -266,11 +274,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) statement;\n" +
 			"else if (condition2) statement;",
@@ -289,11 +298,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1);\n" +
 			"else if (condition2);",
@@ -310,11 +320,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition1)\n" +
@@ -345,11 +356,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition1)\n" +
@@ -376,11 +388,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition1)\n" +
@@ -415,11 +428,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition1);\n" +
@@ -442,11 +456,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -503,11 +518,12 @@ public class TestElseIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"}\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
index 768f5b6c9..4301c0c93 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestElseStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition) {\n" +
 			"\tstatement;\n" +
@@ -55,11 +56,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -84,11 +86,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyIfAndElseBlocks() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition) {\n" +
 			"}\n" +
@@ -111,11 +114,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyIfAndElseBlocks() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -138,11 +142,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition) {\n" +
 			"\tstatement;\n" +
@@ -169,11 +174,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -200,11 +206,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition) statement;\n" +
 			"else statement;",
@@ -223,11 +230,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true);\n" +
 			"else;",
@@ -245,11 +253,12 @@ public class TestElseStatement extends BaseFormatterTests {
 	// don't insert semicolon between else and block open
 	@Test
 	public void testWithCommentBetweenIfStatementAndBodyInsideFunction() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction():void\n" +
 			"{\n" +
@@ -284,11 +293,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition)\n" +
@@ -319,11 +329,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true)\n" +
@@ -350,11 +361,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true)\n" +
@@ -389,11 +401,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true);\n" +
@@ -417,11 +430,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentBeforeStartBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -450,11 +464,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentBeforeEndBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -481,11 +496,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -542,11 +558,12 @@ public class TestElseStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"}\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestFieldDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestFieldDeclaration.java
index a5e9ed0b9..fb6e89c0c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestFieldDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestFieldDeclaration.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestFieldDeclaration extends BaseFormatterTests {
 	@Test
 	public void testWithoutTypeAndWithoutInitializerAndWithoutNamespace() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -51,11 +52,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithoutInitializerAndWithoutNamespace() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -76,11 +78,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithInitializerAndWithoutNamespace() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -101,11 +104,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithInitializerAndWithNamespace() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -126,11 +130,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeFollowedByInlineMultilineComment() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -151,11 +156,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithFunctionInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
@@ -179,11 +185,12 @@ public class TestFieldDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithObjectInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithField\n" +
 			"{\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestForEachStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestForEachStatement.java
index 709700f97..8af7c7ef7 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestForEachStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestForEachStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestForEachStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array) {\n" +
 			"}",
@@ -48,11 +49,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array)\n" +
 			"{\n" +
@@ -70,11 +72,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each(var item:Object in array)\n" +
 			"{\n" +
@@ -95,11 +98,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array)\n" +
 			"{\n" +
@@ -120,11 +124,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array) {\n" +
 			"\tstatement;\n" +
@@ -144,11 +149,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array)\n" +
 			"{\n" +
@@ -168,11 +174,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array) statement;",
 			// @formatter:on
@@ -188,11 +195,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array);",
 			// @formatter:on
@@ -207,11 +215,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor each (var item:Object in array)\n" +
@@ -236,11 +245,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor each (var item:Object in array)\n" +
@@ -263,11 +273,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor each (var item:Object in array)\n" +
@@ -294,11 +305,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor each (var item:Object in array);\n" +
@@ -319,11 +331,12 @@ public class TestForEachStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for each (var item:Object in array) {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestForInStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestForInStatement.java
index f3503e56a..140d5e96d 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestForInStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestForInStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestForInStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object) {\n" +
 			"}",
@@ -49,11 +50,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object)\n" +
 			"{\n" +
@@ -71,11 +73,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for(var key:String in object)\n" +
 			"{\n" +
@@ -96,11 +99,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object)\n" +
 			"{\n" +
@@ -121,11 +125,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object) {\n" +
 			"\tstatement;\n" +
@@ -145,11 +150,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object)\n" +
 			"{\n" +
@@ -169,11 +175,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object) statement;",
 			// @formatter:on
@@ -189,11 +196,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object);",
 			// @formatter:on
@@ -208,11 +216,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor each (var key:String in object)\n" +
@@ -237,11 +246,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var key:String in object)\n" +
@@ -264,11 +274,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var key:String in object)\n" +
@@ -295,11 +306,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var key:String in object);\n" +
@@ -320,11 +332,12 @@ public class TestForInStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var key:String in object) {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestForStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestForStatement.java
index 28f6dfbdf..3ef75c3f4 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestForStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestForStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestForStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++) {\n" +
 			"}",
@@ -48,11 +49,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++)\n" +
 			"{\n" +
@@ -70,11 +72,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for(var i:int = 0; i < 3; i++)\n" +
 			"{\n" +
@@ -95,11 +98,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++)\n" +
 			"{\n" +
@@ -120,11 +124,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++) {\n" +
 			"\tstatement;\n" +
@@ -144,11 +149,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++)\n" +
 			"{\n" +
@@ -168,11 +174,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++) statement;",
 			// @formatter:on
@@ -188,11 +195,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++);",
 			// @formatter:on
@@ -206,11 +214,12 @@ public class TestForStatement extends BaseFormatterTests {
 	}
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition)\n" +
 			"{\n" +
@@ -237,11 +246,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var i:int = 0; i < 3; i++)\n" +
@@ -266,11 +276,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var i:int = 0; i < 3; i++)\n" +
@@ -293,11 +304,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var i:int = 0; i < 3; i++)\n" +
@@ -324,11 +336,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tfor (var i:int = 0; i < 3; i++);\n" +
@@ -349,11 +362,12 @@ public class TestForStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"for (var i:int = 0; i < 3; i++) {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestFormatterOff.java b/formatter/src/test/java/org/apache/royale/formatter/TestFormatterOff.java
index 84710e674..05524fb4f 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestFormatterOff.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestFormatterOff.java
@@ -26,13 +26,14 @@ import org.junit.Test;
 public class TestFormatterOff extends BaseFormatterTests {
 	@Test
 	public void testAS3FormatterOff() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = true;
-		formatter.tabSize = 2;
-		formatter.maxPreserveNewLines = 2;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = true;
+		settings.tabSize = 2;
+		settings.maxPreserveNewLines = 2;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"\t// @formatter:off\n" +
 			"for(var i:int=0;i<3;i++){\n" +
@@ -72,13 +73,14 @@ public class TestFormatterOff extends BaseFormatterTests {
 
 	@Test
 	public void testMXMLFormatterOff() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = true;
-		formatter.tabSize = 2;
-		formatter.maxPreserveNewLines = 2;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = true;
+		settings.tabSize = 2;
+		settings.maxPreserveNewLines = 2;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<mx:Application>\n" +
 			"\t<!-- @formatter:off -->\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
index 4090bff06..33d8e9b49 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
@@ -27,11 +27,12 @@ import org.junit.Test;
 public class TestFunctionDeclaration extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction() {\n" +
 			"}",
@@ -49,11 +50,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction()\n" +
 			"{\n" +
@@ -71,11 +73,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction() {\n" +
 			"\tstatement;\n" +
@@ -95,11 +98,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction()\n" +
 			"{\n" +
@@ -119,11 +123,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testReturnType() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction():void\n" +
 			"{\n" +
@@ -144,11 +149,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testParameter() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(p1:String)\n" +
 			"{\n" +
@@ -169,11 +175,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testParameters() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(p1:String, p2:Number)\n" +
 			"{\n" +
@@ -194,11 +201,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testNewLinesAmongParameters() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(p1:String,\n" +
 			"p2:Number):void\n" +
@@ -223,11 +231,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testParametersWithRest() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(p1:String, ...rest)\n" +
 			"{\n" +
@@ -248,11 +257,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testParametersRestOnly() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(...rest)\n" +
 			"{\n" +
@@ -273,11 +283,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWrappedInParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"(function myFunction(...rest)\n" +
 			"{\n" +
@@ -298,11 +309,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testAsArgument() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"identifier(function myFunction(...rest)\n" +
 			"{\n" +
@@ -323,11 +335,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction() {\n" +
 			"}",
@@ -343,11 +356,12 @@ public class TestFunctionDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"function myFunction(param:String):void\n" +
 			"{\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestIdentifier.java b/formatter/src/test/java/org/apache/royale/formatter/TestIdentifier.java
index f56c396fc..36bfadfd3 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIdentifier.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIdentifier.java
@@ -25,9 +25,12 @@ import org.junit.Test;
 public class TestIdentifier extends BaseFormatterTests {
 	@Test
 	public void testBasic() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"identifier;",
 			// @formatter:on
@@ -42,9 +45,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryPlus() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"+identifier;",
 			// @formatter:on
@@ -59,9 +65,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryPlusWithLeadingOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var a = +identifier;",
 			// @formatter:on
@@ -76,9 +85,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinus() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"-identifier;",
 			// @formatter:on
@@ -93,9 +105,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithLeadingOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var a = -identifier;",
 			// @formatter:on
@@ -110,9 +125,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"(-identifier);",
 			// @formatter:on
@@ -127,9 +145,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithBrackets() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a[-identifier];",
 			// @formatter:on
@@ -144,9 +165,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\t-identifier;\n" +
@@ -165,9 +189,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a;\n" +
 			"-identifier;",
@@ -184,9 +211,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithReturn() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return -identifier;",
 			// @formatter:on
@@ -201,9 +231,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithComma() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var array = [identifier, -identifier];",
 			// @formatter:on
@@ -218,9 +251,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testUnaryMinusWithColon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj = {field: -identifier};",
 			// @formatter:on
@@ -235,9 +271,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testNot() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"!identifier;",
 			// @formatter:on
@@ -252,9 +291,12 @@ public class TestIdentifier extends BaseFormatterTests {
 
 	@Test
 	public void testDoubleNot() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"!!identifier;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
index 8c704b5e7..0363ec5da 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestIfStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true) {\n" +
 			"}",
@@ -48,11 +49,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -70,11 +72,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if(true)\n" +
 			"{\n" +
@@ -95,11 +98,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -120,11 +124,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true) {\n" +
 			"\tstatement;\n" +
@@ -144,11 +149,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -168,11 +174,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true) statement;",
 			// @formatter:on
@@ -188,11 +195,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true);",
 			// @formatter:on
@@ -207,11 +215,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentBeforeStartBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true) //comment\n" +
 			"{\n" +
@@ -232,11 +241,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentBeforeEndBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (true)\n" +
 			"{\n" +
@@ -257,11 +267,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (condition)\n" +
@@ -286,11 +297,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true)\n" +
@@ -313,11 +325,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true)\n" +
@@ -344,11 +357,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tif (true);\n" +
@@ -369,11 +383,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1)\n" +
 			"{\n" +
@@ -400,11 +415,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNestedBodiesWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{if (condition1) if (condition2) statement;}",
 			// @formatter:on
@@ -423,11 +439,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1) {\n" +
 			"}",
@@ -443,11 +460,12 @@ public class TestIfStatement extends BaseFormatterTests {
 
 	@Test
 	public void testConditionsOnMultipleLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (condition1 &&\n" +
 			"\tcondition2\n" + 
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java b/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
index bc1039a79..eb988f93b 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestImportDirective.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestImportDirective extends BaseFormatterTests {
 	@Test
 	public void testDirective() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"import com.example.MyClass;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestIncludeDirective.java b/formatter/src/test/java/org/apache/royale/formatter/TestIncludeDirective.java
index 1e6c28bd8..a45265877 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIncludeDirective.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIncludeDirective.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestIncludeDirective extends BaseFormatterTests {
 	@Test
 	public void testDirective() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"include \"file.as\";",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestIncrementOperator.java b/formatter/src/test/java/org/apache/royale/formatter/TestIncrementOperator.java
index ab26ee1cb..66573ab44 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIncrementOperator.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIncrementOperator.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestIncrementOperator extends BaseFormatterTests {
 	@Test
 	public void testAfter() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"i++;",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestIncrementOperator extends BaseFormatterTests {
 
 	@Test
 	public void testBefore() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"++i;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestInterfaceDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestInterfaceDeclaration.java
index a25965dda..0a0e3f38f 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestInterfaceDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestInterfaceDeclaration.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestInterfaceDeclaration extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface {\n" +
 			"}",
@@ -48,11 +49,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface\n" +
 			"{\n" +
@@ -70,11 +72,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface {\n" +
 			"\tstatement;\n" +
@@ -94,11 +97,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface\n" +
 			"{\n" +
@@ -118,11 +122,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testOneMethod() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface\n" +
 			"{\n" +
@@ -143,11 +148,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleMethods() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface\n" +
 			"{\n" +
@@ -170,11 +176,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface {\n" +
 			"}",
@@ -190,11 +197,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtends() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface extends MyOtherInterface {\n" +
 			"}",
@@ -212,11 +220,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtendsOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface\n" +
 			"\textends MyOtherInterface {\n" +
@@ -236,11 +245,12 @@ public class TestInterfaceDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testExtendsMultiple() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"interface MyInterface extends MyOtherInterface, MyOtherInterface2 {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestLogicalOperators.java b/formatter/src/test/java/org/apache/royale/formatter/TestLogicalOperators.java
index b75d689f3..dcf6e03e1 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestLogicalOperators.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestLogicalOperators.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestLogicalOperators extends BaseFormatterTests {
 	@Test
 	public void testLogicalNotOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"!a;",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestLogicalOperators extends BaseFormatterTests {
 
 	@Test
 	public void testLogicalAndOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a&&b;",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestLogicalOperators extends BaseFormatterTests {
 
 	@Test
 	public void testLogicalOrOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a||b;",
 			// @formatter:on
@@ -77,9 +86,12 @@ public class TestLogicalOperators extends BaseFormatterTests {
 
 	@Test
 	public void testLogicalAndCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a&&=b;",
 			// @formatter:on
@@ -94,9 +106,12 @@ public class TestLogicalOperators extends BaseFormatterTests {
 
 	@Test
 	public void testLogicalOrCompoundAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a||=b;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLMetadata.java b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLMetadata.java
index 4bca60cfd..c9264ca07 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLMetadata.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLMetadata.java
@@ -26,9 +26,10 @@ import org.junit.Test;
 public class TestMXMLMetadata extends BaseFormatterTests {
 	@Test
 	public void testEmptyMetadataNoCdata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Metadata>\n" +
@@ -49,9 +50,10 @@ public class TestMXMLMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testEmptyMetadataWithCdata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Metadata>\n" +
@@ -76,9 +78,10 @@ public class TestMXMLMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testSingleMetadata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Metadata>\n" +
@@ -101,9 +104,10 @@ public class TestMXMLMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleMetadata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Metadata>\n" +
@@ -128,9 +132,10 @@ public class TestMXMLMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleMetadataWithAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Metadata>\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLScript.java b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLScript.java
index 5ecc06a7d..e40e2f62c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLScript.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLScript.java
@@ -26,9 +26,10 @@ import org.junit.Test;
 public class TestMXMLScript extends BaseFormatterTests {
 	@Test
 	public void testEmptyScriptNoCdata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Script>\n" +
@@ -51,9 +52,10 @@ public class TestMXMLScript extends BaseFormatterTests {
 
 	@Test
 	public void testEmptyScriptWithCdata() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Script>\n" +
@@ -78,9 +80,10 @@ public class TestMXMLScript extends BaseFormatterTests {
 
 	@Test
 	public void testScriptWithActionScript() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Application>\n" +
 			"<fx:Script>\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLTag.java b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLTag.java
index 0cc92e6cd..7f17ee98e 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMXMLTag.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMXMLTag.java
@@ -26,9 +26,10 @@ import org.junit.Test;
 public class TestMXMLTag extends BaseFormatterTests {
 	@Test
 	public void testSelfClosingTag() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag />",
 			// @formatter:on
@@ -43,9 +44,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testTagWithEmptyText() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag></s:Tag>",
 			// @formatter:on
@@ -60,9 +62,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testTagWithText() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>Hello World</s:Tag>",
 			// @formatter:on
@@ -77,9 +80,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testTagWithTextAndNewLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>\n" +
 			"\tHello World\n" +
@@ -98,9 +102,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testTagWithNewLineText() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>\n" +
 			"</s:Tag>",
@@ -117,9 +122,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testNewLinesBetweenTags() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>\n" +
 			"\n" +
@@ -142,9 +148,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testExcessWhitespaceBetweenTags() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>\t\n" +
 			"\n\t" +
@@ -163,9 +170,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMixedTextAndTagChildren1() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag>text <s:Tag/></s:Tag>",
 			// @formatter:on
@@ -180,9 +188,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMixedTextAndTagChildren2() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag><s:Tag/> text</s:Tag>",
 			// @formatter:on
@@ -197,9 +206,10 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMixedTextAndTagChildren3() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag><s:Tag/> text <s:Tag/></s:Tag>",
 			// @formatter:on
@@ -214,11 +224,12 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		formatter.mxmlInsertNewLineBetweenAttributes = false;
-		formatter.mxmlAlignAttributes = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		settings.mxmlInsertNewLineBetweenAttributes = false;
+		settings.mxmlAlignAttributes = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag one=\"1\"   two=\"2\"/>",
 			// @formatter:on
@@ -233,11 +244,12 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleAttributesOnePerLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		formatter.mxmlInsertNewLineBetweenAttributes = true;
-		formatter.mxmlAlignAttributes = false;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		settings.mxmlInsertNewLineBetweenAttributes = true;
+		settings.mxmlAlignAttributes = false;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag one=\"1\" two=\"2\"/>",
 			// @formatter:on
@@ -253,11 +265,12 @@ public class TestMXMLTag extends BaseFormatterTests {
 
 	@Test
 	public void testMXMLAlignAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaces = false;
-		formatter.mxmlInsertNewLineBetweenAttributes = true;
-		formatter.mxmlAlignAttributes = true;
-		String result = formatter.formatMXMLText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaces = false;
+		settings.mxmlInsertNewLineBetweenAttributes = true;
+		settings.mxmlAlignAttributes = true;
+		MXMLTokenFormatter formatter = new MXMLTokenFormatter(settings);
+		String result = formatter.format("file.mxml",
 		// @formatter:off
 			"<s:Tag one=\"1\" two=\"2\" three=\"3\"/>",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMetadata.java b/formatter/src/test/java/org/apache/royale/formatter/TestMetadata.java
index ffc1cdbb9..e5a579915 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMetadata.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMetadata.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestMetadata extends BaseFormatterTests {
 	@Test
 	public void testUnknownMetaTagOnClassWithoutAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"[UnknownMetaTag]\n" +
 			"class MyClass\n" +
@@ -51,11 +52,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testUnknownMetaTagOnClassWithoutAttributeNameAndWithValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"[UnknownMetaTag(\"value\")]\n" +
 			"class MyClass\n" +
@@ -76,11 +78,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testUnknownMetaTagOnClassWithAttributeAndWithValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"[UnknownMetaTag(unknownAttr=\"value\")]\n" +
 			"class MyClass\n" +
@@ -101,11 +104,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testUnknownMetaTagOnClassWithMultipleAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"[UnknownMetaTag(unknownAttr1=\"value1\",unknownAttr2=\"value2\")]\n" +
 			"class MyClass\n" +
@@ -126,11 +130,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testEventMetaTagOnClassWithNameAndTypeAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"[Event(name=\"change\", type=\"flash.events.Event\")]\n" +
 			"class MyClass\n" +
@@ -151,11 +156,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testBindableMetaTagOnFieldWithoutAttributes() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"{\n" +
@@ -178,11 +184,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testBindableMetaTagOnFieldWithValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"{\n" +
@@ -205,11 +212,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testBindableMetaTagOnFieldWithEventAttribute() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class MyClass\n" +
 			"{\n" +
@@ -232,11 +240,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testAfterSingleLineComment() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"// comment\n" +
 			"[UnknownMetaTag(attr1=\"one\")]\n",
@@ -253,11 +262,12 @@ public class TestMetadata extends BaseFormatterTests {
 
 	@Test
 	public void testAfterMultiLineComment() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/* comment */\n" +
 			"[UnknownMetaTag(attr1=\"one\")]\n",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMethodDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestMethodDeclaration.java
index 0ec7054ab..062fef9c9 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMethodDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMethodDeclaration.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestMethodDeclaration extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithMethod\n" +
 			"{\n" +
@@ -55,11 +56,12 @@ public class TestMethodDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithMethod\n" +
 			"{\n" +
@@ -82,11 +84,12 @@ public class TestMethodDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithMethod\n" +
 			"{\n" +
@@ -112,11 +115,12 @@ public class TestMethodDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithMethod\n" +
 			"{\n" +
@@ -141,12 +145,13 @@ public class TestMethodDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"class ClassWithMethod\n" +
 			"{\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMiscellaneousOperators.java b/formatter/src/test/java/org/apache/royale/formatter/TestMiscellaneousOperators.java
index 2897ff5ed..0b21f5a12 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMiscellaneousOperators.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMiscellaneousOperators.java
@@ -26,8 +26,11 @@ import org.junit.Test;
 public class TestMiscellaneousOperators extends BaseFormatterTests {
 	@Test
 	public void testAssignmentOperator() {
-		FORMATTER formatter = new FORMATTER();
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"a=b;",
 			// @formatter:on
@@ -42,8 +45,11 @@ public class TestMiscellaneousOperators extends BaseFormatterTests {
 
 	@Test
 	public void testNamespaceQualifierOperator() {
-		FORMATTER formatter = new FORMATTER();
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"ns::myVar;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java b/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
index 6d32a0269..99dd26ce1 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestMultiLineComment extends BaseFormatterTests {
 	@Test
 	public void testAtEndOfStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"statement; /* this is a comment */",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestMultiLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testOnLineBeforeStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/* this is a comment */\n" +
 			"statement;",
@@ -66,11 +68,12 @@ public class TestMultiLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testOnLineAfterStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"statement;\n" +
 			"/* this is a comment */",
@@ -87,11 +90,12 @@ public class TestMultiLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testPreserveMultilineFormatting() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/*\n" +
 			"\tthis is a comment\n" +
@@ -110,12 +114,13 @@ public class TestMultiLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testAtEndOfBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tstatement;\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestNewStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestNewStatement.java
index 0b069fc29..19c4de1e9 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestNewStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestNewStatement.java
@@ -27,11 +27,12 @@ import org.junit.Test;
 public class TestNewStatement extends BaseFormatterTests {
 	@Test
 	public void testWithClassNoParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"new Sprite;",
 			// @formatter:on
@@ -46,11 +47,12 @@ public class TestNewStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithClassConstructorCall() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"new Sprite();",
 			// @formatter:on
@@ -65,11 +67,12 @@ public class TestNewStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithVectorLiteral() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"new <Sprite>[];",
 			// @formatter:on
@@ -84,11 +87,12 @@ public class TestNewStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithVectorLiteralAnyType() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"new <*>[];",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java b/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
index 9075f39d5..544ec463c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestNumberLiteral.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestNumberLiteral extends BaseFormatterTests {
 	@Test
 	public void testFloat() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"123.4;",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestNumberLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testInt() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"123;",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestNumberLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testNegative() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"-123;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java b/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
index e6b074886..b7c80dc91 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestObjectLiteral extends BaseFormatterTests {
 	@Test
 	public void testEmpty() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {};",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testOneFieldOnSingleLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {one: 123.4};",
 			// @formatter:on
@@ -60,9 +66,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testOneFieldOnMultipleLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {\n" +
 			"\tone: 123.4\n" +
@@ -83,9 +92,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleFields() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {one: 123.4, two: \"hello world\"};",
 			// @formatter:on
@@ -100,9 +112,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleFieldsOnMultipleLines1() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {\n" +
 			"\tone: 123.4,\n" +
@@ -125,9 +140,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testMultipleFieldsOnMultipleLines2() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {\n" +
 			"\tone: 123.4,\n" +
@@ -150,9 +168,12 @@ public class TestObjectLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testStringField() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var obj:Object = {\"string-field\": 123.4};",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
index 9f8b5d327..8fa4d53c3 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestPackageDeclaration extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package {\n" +
 			"}",
@@ -49,11 +50,12 @@ public class TestPackageDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package\n" +
 			"{\n" +
@@ -71,11 +73,12 @@ public class TestPackageDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package {\n" +
 			"\tstatement;\n" +
@@ -95,11 +98,12 @@ public class TestPackageDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package\n" +
 			"{\n" +
@@ -119,11 +123,12 @@ public class TestPackageDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithName() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package com.example {\n" +
 			"\tstatement;\n" +
@@ -143,11 +148,12 @@ public class TestPackageDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"package com.example {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestPreserveNewLines.java b/formatter/src/test/java/org/apache/royale/formatter/TestPreserveNewLines.java
index 031cb7045..6fdd1184d 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestPreserveNewLines.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestPreserveNewLines.java
@@ -26,10 +26,11 @@ import org.junit.Test;
 public class TestPreserveNewLines extends BaseFormatterTests {
 	@Test
 	public void testNoMaxPreserveNewLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.maxPreserveNewLines = 0;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.maxPreserveNewLines = 0;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/* this is a comment */\n" +
 			"\n" +
@@ -50,10 +51,11 @@ public class TestPreserveNewLines extends BaseFormatterTests {
 
 	@Test
 	public void testMaxPreserveNewLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.maxPreserveNewLines = 2;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.maxPreserveNewLines = 2;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/* this is a comment */\n" +
 			"\n" +
@@ -73,10 +75,11 @@ public class TestPreserveNewLines extends BaseFormatterTests {
 
 	@Test
 	public void testNewLinesBeforeEndOfStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.maxPreserveNewLines = 0;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.maxPreserveNewLines = 0;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"1 + 2" +
 			"\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java b/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
index 8e65983a9..cba6c2c66 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestRegExp.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestRegExp extends BaseFormatterTests {
 	@Test
 	public void testRegExp() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"/\\d/g;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestReturnStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestReturnStatement.java
index 96ca600aa..a54717dea 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestReturnStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestReturnStatement.java
@@ -24,14 +24,14 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 public class TestReturnStatement extends BaseFormatterTests {
-
 	@Test
 	public void testWithoutValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return;",
 			// @formatter:on
@@ -46,11 +46,12 @@ public class TestReturnStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutValueAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return",
 			// @formatter:on
@@ -65,11 +66,12 @@ public class TestReturnStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return 123;",
 			// @formatter:on
@@ -84,11 +86,12 @@ public class TestReturnStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValueAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return 123",
 			// @formatter:on
@@ -103,11 +106,12 @@ public class TestReturnStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValueOnNextLineCausesAutomaticSemicolonInsertion() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"return\n" +
 			"123;",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java b/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
index 4c2060646..2d6407be4 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
@@ -26,12 +26,13 @@ import org.junit.Test;
 public class TestSingleLineComment extends BaseFormatterTests {
 	@Test
 	public void testInsertSpaceAtStartOfLineComment() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"//this is a comment",
 			// @formatter:on
@@ -45,12 +46,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 	}
 	@Test
 	public void testDisableInsertSpaceAtStartOfLineComment() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"// this is a comment",
 			// @formatter:on
@@ -65,12 +67,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testAtEndOfStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"statement; // this is a comment",
 			// @formatter:on
@@ -85,12 +88,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testOnLineBeforeStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"// this is a comment\n" +
 			"statement;",
@@ -107,13 +111,14 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testWithExtraLineBeforeStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		formatter.maxPreserveNewLines = 2;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		settings.maxPreserveNewLines = 2;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"// this is a comment\n" +
 			"\n" +
@@ -132,12 +137,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testOnLineAfterStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"statement;\n" +
 			"// this is a comment",
@@ -154,12 +160,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testAtEndOfControlFlowStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"if (statement) // this is a comment\n" +
 			"{\n" +
@@ -180,12 +187,13 @@ public class TestSingleLineComment extends BaseFormatterTests {
 
 	@Test
 	public void testAtEndOfBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.insertSpaceAtStartOfLineComment = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.insertSpaceAtStartOfLineComment = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tstatement;\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestStringLiteral.java b/formatter/src/test/java/org/apache/royale/formatter/TestStringLiteral.java
index d8ae04250..4e8a85c63 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestStringLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestStringLiteral.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestStringLiteral extends BaseFormatterTests {
 	@Test
 	public void testEmptyString() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"\"\";",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestStringLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testWithNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"\"\\n\";",
 			// @formatter:on
@@ -64,11 +66,12 @@ public class TestStringLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testDoubleQuoteWithEscapedDoubleQuote() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"\"\\\"\";",
 			// @formatter:on
@@ -83,11 +86,12 @@ public class TestStringLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testDoubleQuoteWithUnescapedSingleQuote() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"\"'\";",
 			// @formatter:on
@@ -102,11 +106,12 @@ public class TestStringLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testSingleQuoteWithEscapedSingleQuote() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"'\\'';",
 			// @formatter:on
@@ -121,11 +126,12 @@ public class TestStringLiteral extends BaseFormatterTests {
 
 	@Test
 	public void testSingleQuoteWithUnescapedDoubleQuote() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"'\"';",
 			// @formatter:on
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 2615958f7..dc034a9e3 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestSwitchStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition) {\n" +
 			"}",
@@ -48,11 +49,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 				"switch (condition)\n" +
 				"{\n" +
@@ -70,11 +72,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -97,11 +100,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndMultipleStatements() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -126,11 +130,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndEmptyBlockEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -155,11 +160,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndEmptyBlockDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -182,11 +188,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndBlockWithStatementEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -213,11 +220,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndBlockWithStatementDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -242,11 +250,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndStatementAfterBlockEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -278,11 +287,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseAndStatementAfterBlockDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -314,11 +324,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -341,11 +352,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndMultipleStatements() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -370,11 +382,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndEmptyBlockEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -399,11 +412,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndEmptyBlockDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -426,11 +440,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndBlockWithStatementEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -457,11 +472,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndBlockWithStatementDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -486,11 +502,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndStatementAfterBlockEnablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -522,11 +539,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithDefaultClauseAndStatementAfterBlockDisablePlaceOpenBraceOnNewLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -558,11 +576,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithMultipleCaseClauses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -589,11 +608,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseAndDefaultClauses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -620,11 +640,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCaseClauseFallthrough() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -653,11 +674,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -682,11 +704,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithCaseClause() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -715,11 +738,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithCaseClauseAndEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -750,11 +774,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithCaseClauseAndBlockWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -787,11 +812,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithDefaultClause() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -820,11 +846,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithDefaultClauseAndEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -855,11 +882,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithDefaultClauseAndBlockWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\tswitch (condition)\n" +
@@ -892,11 +920,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentOnSameLineAsCaseClause() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
@@ -919,11 +948,12 @@ public class TestSwitchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCommentOnSameLineAsDefaultClause() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"switch (condition)\n" +
 			"{\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java
index f9648dfb2..b324d9baa 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestTernaryStatement extends BaseFormatterTests {
 	@Test
 	public void testBasic() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"condition ? statement : statement;",
 			// @formatter:on
@@ -45,11 +46,12 @@ public class TestTernaryStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNested() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"condition ? condition ? statement : statement : condition ? statement : statement;",
 			// @formatter:on
@@ -63,11 +65,12 @@ public class TestTernaryStatement extends BaseFormatterTests {
 	}
 	@Test
 	public void testObjectLiterals() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"condition ? {} : {};",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java
index d6c21f1a4..1df73a952 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java
@@ -27,12 +27,13 @@ public class TestThrowStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.ignoreProblems = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.ignoreProblems = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"throw;",
 			// @formatter:on
@@ -48,12 +49,13 @@ public class TestThrowStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithoutValueAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.ignoreProblems = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.ignoreProblems = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"throw",
 			// @formatter:on
@@ -68,11 +70,12 @@ public class TestThrowStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValue() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"throw new Error();",
 			// @formatter:on
@@ -87,11 +90,12 @@ public class TestThrowStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValueAndWithoutSemicolon() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"throw new Error()",
 			// @formatter:on
@@ -106,12 +110,13 @@ public class TestThrowStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithValueOnNextLineCausesAutomaticSemicolonInsertion() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		formatter.ignoreProblems = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		settings.ignoreProblems = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"throw\n" +
 			"new Error();",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestTryCatchStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestTryCatchStatement.java
index f487278d4..5f139cb64 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestTryCatchStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestTryCatchStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestTryCatchStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try {\n" +
 			"}\n" +
@@ -53,11 +54,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try\n" +
 			"{\n" +
@@ -80,11 +82,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try\n" +
 			"{\n" + 
@@ -113,11 +116,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try\n" +
 			"{\n" + 
@@ -147,11 +151,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try {\n" +
 			"\tstatement;\n" +
@@ -178,11 +183,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try\n" +
 			"{\n" + 
@@ -209,11 +215,12 @@ public class TestTryCatchStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithCommentBetweenTryStatementAndBody() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"try // comment\n" +
 			"{\n" +
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestUseNamespaceDirective.java b/formatter/src/test/java/org/apache/royale/formatter/TestUseNamespaceDirective.java
index d53763775..17d706a4d 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestUseNamespaceDirective.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestUseNamespaceDirective.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestUseNamespaceDirective extends BaseFormatterTests {
 	@Test
 	public void testDirective() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"use namespace ns;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
index 37b2a9c92..c4a98ca5b 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
@@ -27,11 +27,12 @@ import org.junit.Test;
 public class TestVariableDeclaration extends BaseFormatterTests {
 	@Test
 	public void testWithoutTypeAndWithoutInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar",
 			// @formatter:on
@@ -46,11 +47,12 @@ public class TestVariableDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithoutInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar:String",
 			// @formatter:on
@@ -65,11 +67,12 @@ public class TestVariableDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithTypeAndWithInitializer() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar:Number = 123.4;",
 			// @formatter:on
@@ -84,11 +87,12 @@ public class TestVariableDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithAnyType() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar:*;",
 			// @formatter:on
@@ -103,11 +107,12 @@ public class TestVariableDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testWithVectorAnyType() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar:Vector.<*>;",
 			// @formatter:on
@@ -122,11 +127,12 @@ public class TestVariableDeclaration extends BaseFormatterTests {
 
 	@Test
 	public void testChained() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"var myVar:Number = what(hi, 2), myVar2:Number = 456.7;",
 			// @formatter:on
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestWhileStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestWhileStatement.java
index 22c8f3711..1909ca998 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestWhileStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestWhileStatement.java
@@ -26,11 +26,12 @@ import org.junit.Test;
 public class TestWhileStatement extends BaseFormatterTests {
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true)\n\n{\n" +
 			"}",
@@ -49,11 +50,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true)\n" +
 			"{\n" +
@@ -71,11 +73,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while(true)\n" +
 			"{\n" +
@@ -96,11 +99,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisableInsertSpaceAfterControlFlowKeyword() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = false;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = false;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true)\n" +
 			"{\n" +
@@ -121,11 +125,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testPlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true) {\n" +
 			"\tstatement;\n" +
@@ -145,11 +150,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testDisablePlaceOpenBraceOnNewLineWithStatement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true)\n" +
 			"{\n" +
@@ -169,11 +175,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true) statement;",
 			// @formatter:on
@@ -189,11 +196,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (true);",
 			// @formatter:on
@@ -208,11 +216,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\twhile (condition)\n" +
@@ -237,11 +246,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithoutParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\twhile (true)\n" +
@@ -264,11 +274,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIndentWithBodyWithParentheses() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\twhile (true)\n" +
@@ -295,11 +306,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testNextIntentWithBodyIsSemicolonOnSameLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = true;
-		formatter.insertSpaces = false;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = true;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"{\n" +
 			"\twhile (true);\n" +
@@ -320,11 +332,12 @@ public class TestWhileStatement extends BaseFormatterTests {
 
 	@Test
 	public void testCollapseEmptyBlock() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
-		formatter.placeOpenBraceOnNewLine = false;
-		formatter.collapseEmptyBlocks = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.collapseEmptyBlocks = true;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"while (condition1) {\n" +
 			"}",
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestXML.java b/formatter/src/test/java/org/apache/royale/formatter/TestXML.java
index 306cbf7e1..997b81886 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestXML.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestXML.java
@@ -26,9 +26,12 @@ import org.junit.Test;
 public class TestXML extends BaseFormatterTests {
 	@Test
 	public void testEmptyRootElementOnOneLine() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"<root></root>;",
 			// @formatter:on
@@ -43,9 +46,12 @@ public class TestXML extends BaseFormatterTests {
 
 	@Test
 	public void testEmptyRootElementOnMultipleLines() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"<root>\n" +
 			"</root>;",
@@ -62,9 +68,12 @@ public class TestXML extends BaseFormatterTests {
 
 	@Test
 	public void testSelfClosingRootElement() {
-		FORMATTER formatter = new FORMATTER();
-		formatter.insertSpaceBeforeAndAfterBinaryOperators = true;
-		String result = formatter.formatActionScriptText(
+		FormatterSettings settings = new FormatterSettings();
+		settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+		settings.placeOpenBraceOnNewLine = false;
+		settings.insertSpaces = false;
+		ASTokenFormatter formatter = new ASTokenFormatter(settings);
+		String result = formatter.format("file.as",
 		// @formatter:off
 			"<root/>;",
 			// @formatter:on


[royale-compiler] 01/06: linter: null reference checks

Posted by jo...@apache.org.
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

commit 861d8098e0366b8a8e4462167aca34a1296b42ff
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Oct 31 09:40:37 2022 -0700

    linter: null reference checks
---
 .../java/org/apache/royale/linter/MXMLLinter.java  | 23 ++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/linter/src/main/java/org/apache/royale/linter/MXMLLinter.java b/linter/src/main/java/org/apache/royale/linter/MXMLLinter.java
index bd5662755..7a465d589 100644
--- a/linter/src/main/java/org/apache/royale/linter/MXMLLinter.java
+++ b/linter/src/main/java/org/apache/royale/linter/MXMLLinter.java
@@ -104,7 +104,9 @@ public class MXMLLinter extends BaseLinter {
 			PrefixMap prefixMap = mxmlTokenizer.getPrefixMap();
 			MXMLData mxmlData = new MXMLData(originalTokens, prefixMap, new StringFileSpecification(filePath, text));
 			IMXMLTagData rootTag = mxmlData.getRootTag();
-			visitTag(rootTag, tokenQuery, fileProblems);
+			if (rootTag != null) {
+				visitTag(rootTag, tokenQuery, fileProblems);
+			}
 			IMXMLUnitData current = rootTag;
 			int offset = 1;
 			String className = Paths.get(filePath).getFileName().toString();
@@ -112,15 +114,20 @@ public class MXMLLinter extends BaseLinter {
 			if (extensionIndex != -1) {
 				className = className.substring(0, extensionIndex);
 			}
-			String componentName = mxmlData.getRootTag().getShortName();
+			String componentName = null;
+			if (rootTag != null) {
+				componentName = rootTag.getShortName();
+			}
 			StringBuilder builder = new StringBuilder();
 			builder.append("/* ");
 			builder.append(LINTER_TAG_OFF);
 			builder.append(" */");
 			builder.append("package{public class ");
 			builder.append(className);
-			builder.append(" extends ");
-			builder.append(componentName);
+			if (componentName != null) {
+				builder.append(" extends ");
+				builder.append(componentName);
+			}
 			builder.append("{");
 			while (current != null) {
 				if (current instanceof IMXMLTagData) {
@@ -192,8 +199,8 @@ public class MXMLLinter extends BaseLinter {
 					String tokenText = text.substring(start, end);
 					MXMLToken formattingToken = new MXMLToken(MXMLTokenQuery.TOKEN_TYPE_FORMATTING, start, end,
 							prevToken.getLine(), prevToken.getColumn() + end - start, tokenText);
-							formattingToken.setEndLine(token.getLine());
-							formattingToken.setEndLine(token.getColumn());
+					formattingToken.setEndLine(token.getLine());
+					formattingToken.setEndLine(token.getColumn());
 					tokens.add(formattingToken);
 				}
 			}
@@ -207,8 +214,8 @@ public class MXMLLinter extends BaseLinter {
 				String tokenText = text.substring(start, end);
 				MXMLToken formattingToken = new MXMLToken(MXMLTokenQuery.TOKEN_TYPE_FORMATTING, start, end,
 						prevToken.getLine(), prevToken.getColumn() + end - start, tokenText);
-					formattingToken.setEndLine(prevToken.getLine());
-					formattingToken.setEndLine(prevToken.getColumn());
+				formattingToken.setEndLine(prevToken.getLine());
+				formattingToken.setEndLine(prevToken.getColumn());
 				tokens.add(formattingToken);
 			}
 		}