diff --git a/platform/projectModel-impl/src/com/intellij/configurationStore/JbXmlOutputter.java b/platform/projectModel-impl/src/com/intellij/configurationStore/JbXmlOutputter.java
index 2cd52554d912..a191ef54efad 100644
--- a/platform/projectModel-impl/src/com/intellij/configurationStore/JbXmlOutputter.java
+++ b/platform/projectModel-impl/src/com/intellij/configurationStore/JbXmlOutputter.java
@@ -221,7 +221,6 @@ public final class JbXmlOutputter {
* @param out Writer to use.
*/
private void printDocType(Writer out, DocType docType) throws IOException {
-
String publicID = docType.getPublicID();
String systemID = docType.getSystemID();
String internalSubset = docType.getInternalSubset();
@@ -341,7 +340,7 @@ public final class JbXmlOutputter {
* This will handle printing a string. Escapes the element entities,
* trims interior whitespace, etc. if necessary.
*/
- private void printString(Writer out, String str) throws IOException {
+ private void printString(@NotNull Writer out, String str) throws IOException {
if (format.getTextMode() == Format.TextMode.NORMALIZE) {
str = Text.normalizeString(str);
}
@@ -365,7 +364,7 @@ public final class JbXmlOutputter {
* @param out Writer to use.
* @param level int level of indention.
*/
- public void printElement(Writer out, Element element, int level) throws IOException {
+ public void printElement(@NotNull Writer out, @NotNull Element element, int level) throws IOException {
if (elementFilter != null && !elementFilter.accept(element, level)) {
return;
}
@@ -431,7 +430,7 @@ public final class JbXmlOutputter {
*/
private void printContentRange(Writer out, List content, int start, int end, int level) throws IOException {
boolean firstNode; // Flag for 1st node in content
- Object next; // Node we're about to print
+ Content next; // Node we're about to print
int first, index; // Indexes into the list of content
index = start;
@@ -490,62 +489,56 @@ public final class JbXmlOutputter {
* @param end index of last content node (exclusive).
* @param out Writer to use.
*/
- private void printTextRange(Writer out, List content, int start, int end) throws IOException {
- String previous; // Previous text printed
- Object node; // Next node to print
- String next; // Next text to print
-
- previous = null;
-
+ private void printTextRange(@NotNull Writer out, List content, int start, int end) throws IOException {
// remove leading whitespace-only nodes
start = skipLeadingWhite(content, start);
+ if (start >= content.size()) {
+ return;
+ }
- int size = content.size();
- if (start < size) {
- // and remove trialing whitespace-only nodes
- end = skipTrailingWhite(content, end);
+ // and remove trialing whitespace-only nodes
+ end = skipTrailingWhite(content, end);
- for (int i = start; i < end; i++) {
- node = content.get(i);
+ String previous = null;
+ for (int i = start; i < end; i++) {
+ Content node = content.get(i);
- // get the unmangled version of the text we are about to print
- if (node instanceof Text) {
- next = ((Text)node).getText();
- }
- else if (node instanceof EntityRef) {
- next = "&" + ((EntityRef)node).getValue() + ";";
- }
- else {
- throw new IllegalStateException("Should see only CDATA, Text, or EntityRef");
- }
-
- // this may save a little time
- if (next == null || next.isEmpty()) {
- continue;
- }
-
- // determine if we need to pad the output (padding is only need in trim or normalizing mode)
- if (previous != null) { // Not 1st node
- if (format.getTextMode() == Format.TextMode.NORMALIZE || format.getTextMode() == Format.TextMode.TRIM) {
- if (endsWithWhite(previous) || startsWithWhite(next)) {
- out.write(' ');
- }
- }
- }
-
- // Print the node
- if (node instanceof CDATA) {
- printCDATA(out, (CDATA)node);
- }
- else if (node instanceof EntityRef) {
- printEntityRef(out, (EntityRef)node);
- }
- else {
- printString(out, next);
- }
-
- previous = next;
+ // get the unmangled version of the text we are about to print
+ String next;
+ if (node instanceof Text) {
+ next = ((Text)node).getText();
}
+ else if (node instanceof EntityRef) {
+ next = "&" + node.getValue() + ";";
+ }
+ else {
+ throw new IllegalStateException("Should see only CDATA, Text, or EntityRef");
+ }
+
+ // this may save a little time
+ if (next == null || next.isEmpty()) {
+ continue;
+ }
+
+ // determine if we need to pad the output (padding is only need in trim or normalizing mode)
+ if (previous != null && (format.getTextMode() == Format.TextMode.NORMALIZE || format.getTextMode() == Format.TextMode.TRIM)) {
+ if (endsWithWhite(previous) || startsWithWhite(next)) {
+ out.write(' ');
+ }
+ }
+
+ // print the node
+ if (node instanceof CDATA) {
+ printCDATA(out, (CDATA)node);
+ }
+ else if (node instanceof EntityRef) {
+ printEntityRef(out, (EntityRef)node);
+ }
+ else {
+ printString(out, next);
+ }
+
+ previous = next;
}
}
@@ -606,7 +599,7 @@ public final class JbXmlOutputter {
// index = content.size() is returned if content contains
// all whitespace.
// @param start index to begin search (inclusive)
- private int skipLeadingWhite(List content, int start) {
+ private int skipLeadingWhite(@NotNull List content, int start) {
if (start < 0) {
start = 0;
}
@@ -662,7 +655,7 @@ public final class JbXmlOutputter {
int index = start;
int size = content.size();
while (index < size) {
- Object node = content.get(index);
+ Content node = content.get(index);
if (!(node instanceof Text || node instanceof EntityRef)) {
return index;
}
@@ -671,14 +664,9 @@ public final class JbXmlOutputter {
return size;
}
- // Determine if a Object is all whitespace
- private static boolean isAllWhitespace(Object obj) {
+ private static boolean isAllWhitespace(Content obj) {
String str;
-
- if (obj instanceof String) {
- str = (String)obj;
- }
- else if (obj instanceof Text) {
+ if (obj instanceof Text) {
str = ((Text)obj).getText();
}
else {