formatter: fix new lines at end of file not being preserved
diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index d010430..d3239dd 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -408,6 +408,18 @@
 			tokens.add(token);
 			prevToken = token;
 		}
+		if(prevToken != null) {
+			int start = prevToken.getAbsoluteEnd();
+			int end = text.length();
+			if (end > start) {
+				String tokenText = text.substring(start, end);
+				ASToken extraToken = new ASToken(TOKEN_TYPE_EXTRA, start, end, prevToken.getEndLine(),
+						prevToken.getEndColumn(), tokenText);
+				extraToken.setEndLine(prevToken.getLine());
+				extraToken.setEndLine(prevToken.getColumn());
+				tokens.add(extraToken);
+			}
+		}
 		try {
 			return parseTokens(filePath, tokens, node);
 		} catch (Exception e) {
@@ -471,6 +483,12 @@
 		for (int i = 0; i < tokens.size(); i++) {
 			token = tokens.get(i);
 			if (token.getType() == TOKEN_TYPE_EXTRA) {
+				if(i == (tokens.size() - 1)) {
+					//if the last token is whitespace, include new lines
+					numRequiredNewLines = Math.max(0, countNewLinesInExtra(token));
+					appendNewLines(builder, numRequiredNewLines);
+					break;
+				}
 				if (!blockOpenPending) {
 					numRequiredNewLines = Math.max(numRequiredNewLines, countNewLinesInExtra(token));
 					if (!indentedStatement && numRequiredNewLines > 0 && prevTokenNotComment != null
@@ -701,12 +719,7 @@
 			}
 			if (prevToken != null) {
 				if (numRequiredNewLines > 0) {
-					if (maxPreserveNewLines != 0) {
-						numRequiredNewLines = Math.min(maxPreserveNewLines, numRequiredNewLines);
-					}
-					for (int j = 0; j < numRequiredNewLines; j++) {
-						builder.append('\n');
-					}
+					appendNewLines(builder, numRequiredNewLines);
 					appendIndent(builder, indent);
 				} else if (requiredSpace) {
 					builder.append(' ');
@@ -1283,6 +1296,15 @@
 		}
 	}
 
+	private void appendNewLines(StringBuilder builder, int numRequiredNewLines) {
+		if (maxPreserveNewLines != 0) {
+			numRequiredNewLines = Math.min(maxPreserveNewLines, numRequiredNewLines);
+		}
+		for (int j = 0; j < numRequiredNewLines; j++) {
+			builder.append('\n');
+		}
+	}
+
 	private static class BlockStackItem {
 		public BlockStackItem(IASToken token) {
 			this.token = token;