[565339] Formatting an element with enumerated child values should treat them literally
Signed-off-by: Nitin Dahyabhai <thatnitind@gmail.com>
diff --git a/xml/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java b/xml/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
index d42b011..80a34dc 100644
--- a/xml/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
+++ b/xml/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/DefaultXMLPartitionFormatter.java
@@ -84,7 +84,7 @@
private IProgressMonitor fProgressMonitor;
private int replaceSpaces(TextEdit textEdit, int spaceStartOffset, int availableLineWidth, String whitespaceRun) {
- StringBuffer buff = new StringBuffer(whitespaceRun);
+ StringBuilder buff = new StringBuilder(whitespaceRun);
for(int i = 0; i < buff.length(); i++) {
buff.setCharAt(i, ' '); //$NON-NLS-1$
}
@@ -433,7 +433,7 @@
}
}
}
- // format the end tag itself
+ // format the end tag itself, if the contents weren't trimmed
formatWithinEndTag(textEdit, constraints, currentDocumentRegion, previousDocumentRegion);
}
@@ -1171,7 +1171,7 @@
* returns null
*/
private String getCharacterRun(char[] fullTextArray, int textOffset, boolean forWhitespace) {
- StringBuffer characterRun = new StringBuffer();
+ StringBuilder characterRun = new StringBuilder();
boolean nonCharacterFound = false;
while (textOffset < fullTextArray.length && !nonCharacterFound) {
char c = fullTextArray[textOffset];
@@ -1186,7 +1186,7 @@
}
private String getTrailingWhitespace(String text) {
- StringBuffer whitespaceRun = new StringBuffer();
+ StringBuilder whitespaceRun = new StringBuilder();
int index = text.length() - 1;
while(index >= 0) {
char c = text.charAt(index--);
@@ -1199,7 +1199,7 @@
}
private String getIndentString(int indentLevel) {
- StringBuffer indentString = new StringBuffer();
+ StringBuilder indentString = new StringBuilder();
String indent = getFormattingPreferences().getOneIndent();
for (int i = 0; i < indentLevel; ++i) {
indentString.append(indent);
@@ -1259,8 +1259,12 @@
String existingDelimiters = extractLineDelimiters(whitespaceRun, currentRegion);
if(existingDelimiters != null && existingDelimiters.length() > 0) {
String formatted = existingDelimiters + indentString;
- // Don't perform a replace if the formatted string is the same as the existing whitespaceRun
- if(!formatted.equals(whitespaceRun))
+ /*
+ * Don't perform a replace if the formatted string is
+ * the same as the existing whitespaceRun or already
+ * modified
+ */
+ if(!formatted.equals(whitespaceRun) && !(textEdit.hasChildren() && textEdit.getChildren()[textEdit.getChildrenSize() - 1].getOffset() == indentStartOffset))
indentation = new ReplaceEdit(indentStartOffset, whitespaceRun.length(), formatted);
}
// No blank lines to preserve - correct the indent
@@ -1571,8 +1575,9 @@
int contentType = elementDeclaration.getContentType();
String facetValue = null;
- if(elementDeclaration.getDataType() != null)
- facetValue = (String) elementDeclaration.getDataType().getProperty(PROPERTY_WHITESPACE_FACET);
+ CMDataType elementDataType = elementDeclaration.getDataType();
+ if(elementDataType != null)
+ facetValue = (String) elementDataType.getProperty(PROPERTY_WHITESPACE_FACET);
if(facetValue != null) {
if(PRESERVE.equals(facetValue))
childConstraints.setWhitespaceStrategy(XMLFormattingConstraints.PRESERVE);
@@ -1586,7 +1591,12 @@
childConstraints.setWhitespaceStrategy(preferences.getPCDataWhitespaceStrategy());
}
else if (contentType == CMElementDeclaration.ELEMENT && parentConstraints != null && !XMLFormattingConstraints.PRESERVE.equals(parentConstraints.getWhitespaceStrategy())) {
- childConstraints.setWhitespaceStrategy(XMLFormattingConstraints.IGNORE);
+ if (elementDataType != null && elementDataType.getDataTypeName() == CMDataType.ENUM) {
+ childConstraints.setWhitespaceStrategy(XMLFormattingConstraints.COLLAPSE);
+ }
+ else {
+ childConstraints.setWhitespaceStrategy(XMLFormattingConstraints.IGNORE);
+ }
childConstraints.setIndentStrategy(XMLFormattingConstraints.INDENT);
childConstraints.setIsWhitespaceStrategyAHint(true);
childConstraints.setIsIndentStrategyAHint(true);
@@ -1710,7 +1720,7 @@
private String extractLineDelimiters(String base, IStructuredDocumentRegion currentRegion) {
String lineDelimiter = getLineDelimiter(currentRegion);
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for(int index = 0; index < base.length();) {
index = base.indexOf(lineDelimiter, index);
if(index++ >= 0)