diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
index 1bba3c6..f6992d5 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
@@ -1691,7 +1691,7 @@
 			prefs.setValue(IAntCoreConstants.PREFERENCE_TASKS, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
-		StringBuffer tasks = new StringBuffer();
+		StringBuilder tasks = new StringBuilder();
 		for (int i = 0; i < customTasks.length; i++) {
 			tasks.append(customTasks[i].getTaskName());
 			tasks.append(',');
@@ -1714,7 +1714,7 @@
 			prefs.setValue(IAntCoreConstants.PREFERENCE_TYPES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
-		StringBuffer types = new StringBuffer();
+		StringBuilder types = new StringBuilder();
 		for (int i = 0; i < customTypes.length; i++) {
 			types.append(customTypes[i].getTypeName());
 			types.append(',');
@@ -1737,7 +1737,7 @@
 			prefs.setValue(IAntCoreConstants.PREFERENCE_PROPERTIES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
-		StringBuffer properties = new StringBuffer();
+		StringBuilder properties = new StringBuilder();
 		for (int i = 0; i < customProperties.length; i++) {
 			properties.append(customProperties[i].getName());
 			properties.append(',');
@@ -1768,7 +1768,7 @@
 			}
 		}
 		if (changed) {
-			StringBuffer entries = new StringBuffer();
+			StringBuilder entries = new StringBuilder();
 			for (int i = 0; i < additionalEntries.length; i++) {
 				entries.append(additionalEntries[i].getLabel());
 				entries.append(',');
@@ -1806,7 +1806,7 @@
 			prefs.setValue(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
-		StringBuffer entries = new StringBuffer();
+		StringBuilder entries = new StringBuilder();
 		for (int i = 0; i < antHomeEntries.length; i++) {
 			entries.append(antHomeEntries[i].getLabel());
 			entries.append(',');
@@ -1816,7 +1816,7 @@
 	}
 
 	protected void updatePropertyFiles(Preferences prefs) {
-		StringBuffer files = new StringBuffer();
+		StringBuilder files = new StringBuilder();
 		for (int i = 0; i < customPropertyFiles.length; i++) {
 			files.append(customPropertyFiles[i]);
 			files.append(',');
diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index dcf29bc..f07dcdd 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
@@ -114,7 +114,7 @@
 	 * Helper method to ensure an array is converted into an ArrayList.
 	 */
 	private String[] getArray(String args) {
-		StringBuffer sb = new StringBuffer();
+		StringBuilder sb = new StringBuilder();
 		boolean waitingForQuote = false;
 		ArrayList<String> result = new ArrayList<>();
 		for (StringTokenizer tokens = new StringTokenizer(args, ", \"", true); tokens.hasMoreTokens();) { //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/Property.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/Property.java
index 0956f19..93dff1a 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/Property.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/Property.java
@@ -202,7 +202,7 @@
 	 */
 	@Override
 	public String toString() {
-		StringBuffer buff = new StringBuffer("\""); //$NON-NLS-1$
+		StringBuilder buff = new StringBuilder("\""); //$NON-NLS-1$
 		buff.append(getName());
 		buff.append("\"= \""); //$NON-NLS-1$
 		buff.append(getValue(false));
diff --git a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
index 7b6eb8b..ff26f0e 100644
--- a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++ b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
@@ -539,7 +539,7 @@
 		if ((messageOutputLevel != Project.MSG_DEBUG) && (messageOutputLevel != Project.MSG_VERBOSE)) {
 			return;
 		}
-		StringBuffer sb = new StringBuffer();
+		StringBuilder sb = new StringBuilder();
 		for (int i = 0; i < extraArguments.length; i++) {
 			sb.append(extraArguments[i]);
 			sb.append(' ');
@@ -1486,7 +1486,7 @@
 			System.arraycopy(customClasspath, 0, antClasspath, 0, customClasspath.length);
 			System.arraycopy(extraClasspath, 0, antClasspath, customClasspath.length, extraClasspath.length);
 		}
-		StringBuffer buff = new StringBuffer();
+		StringBuilder buff = new StringBuilder();
 		File file = null;
 		for (int i = 0; i < antClasspath.length; i++) {
 			try {
diff --git a/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java b/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
index 3726f52..85b7373 100644
--- a/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
+++ b/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
@@ -530,7 +530,7 @@
 				|| stringToEscape.indexOf("\\n") != -1)) { //$NON-NLS-1$
 			return stringToEscape;
 		}
-		StringBuffer escapedValue = new StringBuffer(stringToEscape);
+		StringBuilder escapedValue = new StringBuilder(stringToEscape);
 		for (int i = 0; i < escapedValue.length(); i++) {
 			switch (escapedValue.charAt(i)) {
 				case '\r':
diff --git a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
index e574337..5eaee4f 100644
--- a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
+++ b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
@@ -100,7 +100,7 @@
 		for (int i = 0; i < size; i++) {
 			column.append(' ');
 		}
-		StringBuffer labelBuff = new StringBuffer();
+		StringBuilder labelBuff = new StringBuilder();
 		labelBuff.append('[');
 		labelBuff.append(name);
 		labelBuff.append("] "); //$NON-NLS-1$
@@ -248,7 +248,7 @@
 		long minutes = seconds / 60;
 		seconds = seconds % 60;
 
-		StringBuffer result = new StringBuffer(RuntimeMessages.AntProcessBuildLogger_Total_time);
+		StringBuilder result = new StringBuilder(RuntimeMessages.AntProcessBuildLogger_Total_time);
 		if (minutes > 0) {
 			result.append(minutes);
 			if (minutes > 1) {
@@ -304,7 +304,7 @@
 			return;
 		}
 		Target target = event.getTarget();
-		StringBuffer msg = new StringBuffer(System.getProperty("line.separator")); //$NON-NLS-1$
+		StringBuilder msg = new StringBuilder(System.getProperty("line.separator")); //$NON-NLS-1$
 		String targetName = target.getName();
 		msg.append(targetName);
 		msg.append(':');
diff --git a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
index a948fb6..87366cb 100644
--- a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
+++ b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
@@ -179,7 +179,7 @@
 			return null;
 		}
 		fHandledException = exception;
-		StringBuffer message = new StringBuffer();
+		StringBuilder message = new StringBuilder();
 		message.append(StringUtils.LINE_SEP);
 		message.append(RuntimeMessages.NullBuildLogger_1);
 		message.append(StringUtils.LINE_SEP);
diff --git a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
index 339c9c7..2f0087e 100644
--- a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
+++ b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
@@ -234,7 +234,7 @@
 		if ((messageOutputLevel != Project.MSG_DEBUG) && (messageOutputLevel != Project.MSG_VERBOSE)) {
 			return;
 		}
-		StringBuffer sb = new StringBuffer();
+		StringBuilder sb = new StringBuilder();
 		for (int i = 0; i < extraArguments.length; i++) {
 			sb.append(extraArguments[i]);
 			sb.append(' ');
@@ -326,7 +326,7 @@
 		while (spaces.length() < maxlen) {
 			spaces += spaces;
 		}
-		StringBuffer msg = new StringBuffer();
+		StringBuilder msg = new StringBuilder();
 		msg.append(heading + lSep + lSep);
 		for (int i = 0; i < names.size(); i++) {
 			msg.append(' ');
@@ -1160,7 +1160,7 @@
 	 */
 	private void printUsage() {
 		String lSep = System.getProperty("line.separator"); //$NON-NLS-1$
-		StringBuffer msg = new StringBuffer();
+		StringBuilder msg = new StringBuilder();
 		msg.append("ant ["); //$NON-NLS-1$
 		msg.append(RemoteAntMessages.getString("InternalAntRunner.options_13")); //$NON-NLS-1$
 		msg.append("] ["); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBreakpoint.java b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBreakpoint.java
index cd88854..75b58ec 100644
--- a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBreakpoint.java
+++ b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBreakpoint.java
@@ -37,7 +37,7 @@
 	}
 
 	public String toMarshallString() {
-		StringBuffer buffer = new StringBuffer(DebugMessageIds.BREAKPOINT);
+		StringBuilder buffer = new StringBuilder(DebugMessageIds.BREAKPOINT);
 		buffer.append(DebugMessageIds.MESSAGE_DELIMITER);
 		buffer.append(fFileName);
 		buffer.append(DebugMessageIds.MESSAGE_DELIMITER);
diff --git a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
index 91b6891..aa53acf 100644
--- a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
+++ b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
@@ -166,7 +166,7 @@
 			return;
 		}
 
-		StringBuffer message = new StringBuffer();
+		StringBuilder message = new StringBuilder();
 		message.append(StringUtils.LINE_SEP);
 		message.append(RemoteAntMessages.getString("RemoteAntBuildLogger.1")); //$NON-NLS-1$
 		message.append(StringUtils.LINE_SEP);
@@ -188,7 +188,7 @@
 		long minutes = seconds / 60;
 		seconds = seconds % 60;
 
-		StringBuffer result = new StringBuffer(RemoteAntMessages.getString("RemoteAntBuildLogger.Total_time")); //$NON-NLS-1$
+		StringBuilder result = new StringBuilder(RemoteAntMessages.getString("RemoteAntBuildLogger.Total_time")); //$NON-NLS-1$
 		if (minutes > 0) {
 			result.append(minutes);
 			if (minutes > 1) {
@@ -241,7 +241,7 @@
 		}
 
 		fSentProcessId = true;
-		StringBuffer message = new StringBuffer(MessageIds.PROCESS_ID);
+		StringBuilder message = new StringBuilder(MessageIds.PROCESS_ID);
 		message.append(fProcessId);
 		sendMessage(message.toString());
 		if (fEventQueue != null) {
@@ -382,7 +382,7 @@
 		Target target = event.getTarget();
 		Location location = AntDebugState.getLocation(target);
 
-		StringBuffer message = new StringBuffer();
+		StringBuilder message = new StringBuilder();
 		message.append(MessageIds.TARGET);
 		message.append(',');
 		message.append(target.getName());
diff --git a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
index 5b669ed..25ce3cf 100644
--- a/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
+++ b/ant/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
@@ -314,7 +314,7 @@
 
 		if (shouldSuspend) {
 			if (detail != null) {
-				StringBuffer message = new StringBuffer(DebugMessageIds.SUSPENDED);
+				StringBuilder message = new StringBuilder(DebugMessageIds.SUSPENDED);
 				message.append(detail);
 				sendRequestResponse(message.toString());
 			}
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
index 0732b87..38ca086 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
@@ -81,7 +81,7 @@
 		if (strings.length == 1)
 			return strings[0];
 
-		StringBuffer buf = new StringBuffer();
+		StringBuilder buf = new StringBuilder();
 		for (int i = 0; i < strings.length - 1; i++) {
 			buf.append(strings[i]);
 			buf.append(ATTRIBUTE_SEPARATOR);
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntProperty.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntProperty.java
index a9c4f36..32bf182 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntProperty.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntProperty.java
@@ -119,7 +119,7 @@
 	 */
 	public String getText() {
 		if (fLabel == null) {
-			StringBuffer buffer = new StringBuffer(getName());
+			StringBuilder buffer = new StringBuilder(getName());
 			buffer.append("= "); //$NON-NLS-1$
 			buffer.append(fValue.getValueString());
 			fLabel = buffer.toString();
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
index 42600d2..c56b78f 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
@@ -311,7 +311,7 @@
 		if (fTarget == null || !fTarget.supportsBreakpoint(breakpoint)) {
 			return;
 		}
-		StringBuffer message = new StringBuffer();
+		StringBuilder message = new StringBuilder();
 		if (add) {
 			try {
 				if (!breakpoint.isEnabled()) {
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
index 96d20f9..bcf3f60 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
@@ -690,7 +690,7 @@
 	}
 
 	private String stripUnescapedQuotes(String javaLibPath) {
-		StringBuffer buf = new StringBuffer(javaLibPath.length());
+		StringBuilder buf = new StringBuilder(javaLibPath.length());
 		for (int i = 0; i < javaLibPath.length(); i++) {
 			char c = javaLibPath.charAt(i);
 			switch (c) {
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
index 5b29851..2e3d912 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
@@ -239,7 +239,7 @@
 		int lineLength = Integer.parseInt(msg.substring(index2 + 1, index3));
 		int index4 = index3 + 1 + lineLength;
 		String line = msg.substring(index3 + 1, index4);
-		StringBuffer labelBuff = new StringBuffer();
+		StringBuilder labelBuff = new StringBuilder();
 		labelBuff.append('[');
 		labelBuff.append(taskName);
 		labelBuff.append("] "); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.tests.core/tests/org/eclipse/ant/tests/core/tests/OptionTests.java b/ant/org.eclipse.ant.tests.core/tests/org/eclipse/ant/tests/core/tests/OptionTests.java
index e30e8a9..03eb521 100644
--- a/ant/org.eclipse.ant.tests.core/tests/org/eclipse/ant/tests/core/tests/OptionTests.java
+++ b/ant/org.eclipse.ant.tests.core/tests/org/eclipse/ant/tests/core/tests/OptionTests.java
@@ -136,7 +136,7 @@
 		IFile file = checkFileExists("TestLogFile.txt"); //$NON-NLS-1$
 
 		try (InputStream stream = file.getContents(); InputStreamReader in = new InputStreamReader(new BufferedInputStream(stream))) {
-			StringBuffer buffer = new StringBuffer();
+			StringBuilder buffer = new StringBuilder();
 			char[] readBuffer = new char[2048];
 			int n = in.read(readBuffer);
 			while (n > 0) {
diff --git a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
index 01275b2..ac61fa4 100644
--- a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
+++ b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
@@ -284,7 +284,7 @@
 	 * @return the contents of the given {@link BufferedReader} as a {@link String}
 	 */
 	protected String getReaderContentAsStringNew(BufferedReader bufferedReader) {
-		StringBuffer result = new StringBuffer();
+		StringBuilder result = new StringBuilder();
 		try {
 			char[] readBuffer = new char[2048];
 			int n = bufferedReader.read(readBuffer);
@@ -308,7 +308,7 @@
 	 * @return the contents of the given {@link BufferedReader} as a {@link String}
 	 */
 	protected String getReaderContentAsString(BufferedReader bufferedReader) {
-		StringBuffer result = new StringBuffer();
+		StringBuilder result = new StringBuilder();
 		try {
 			String line = bufferedReader.readLine();
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
index 3a5ec92..8635886 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
@@ -246,7 +246,7 @@
 		checkLen();
 		if (fBuf[fPos] == '(')
 			return scanExpr();
-		StringBuffer sb = new StringBuffer();
+		StringBuilder sb = new StringBuilder();
 		while (fBuf[fPos] != '|' && fBuf[fPos] != ',' && fBuf[fPos] != ')' && fBuf[fPos] != '*' && fBuf[fPos] != '+' && fBuf[fPos] != '?') {
 			sb.append(fBuf[fPos++]);
 			checkLen();
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntAutoEditStrategy.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntAutoEditStrategy.java
index a086322..12fe616 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntAutoEditStrategy.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntAutoEditStrategy.java
@@ -64,7 +64,7 @@
 			if (!nextNodeIsEndTag(c.offset, d)) {
 				correct.append(XmlDocumentFormatter.createIndent());
 			}
-			StringBuffer buf = new StringBuffer(c.text);
+			StringBuilder buf = new StringBuilder(c.text);
 			buf.append(correct);
 			fAccumulatedChange += buf.length();
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
index 3155c07..15bb3ad 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
@@ -1025,7 +1025,7 @@
 			if (prefix.length() == 0 || propertyName.toLowerCase().startsWith(prefix)) {
 				String additionalPropertyInfo = (String) properties.get(propertyName);
 
-				StringBuffer replacementString = new StringBuffer();
+				StringBuilder replacementString = new StringBuilder();
 				if (appendBraces) {
 					replacementString.append("${"); //$NON-NLS-1$
 				}
@@ -1203,7 +1203,7 @@
 		ICompletionProposal proposal = null;
 		if (openElementName != null) {
 			if (prefix.length() == 0 || openElementName.toLowerCase().startsWith(prefix)) {
-				StringBuffer replaceString = new StringBuffer();
+				StringBuilder replaceString = new StringBuilder();
 				if (!closingMode) {
 					if (previousChar != '/') {
 						if (previousChar != '<') {
@@ -1214,7 +1214,7 @@
 				}
 				replaceString.append(openElementName);
 				replaceString.append('>');
-				StringBuffer displayString = new StringBuffer("</"); //$NON-NLS-1$
+				StringBuilder displayString = new StringBuilder("</"); //$NON-NLS-1$
 				displayString.append(openElementName);
 				displayString.append('>');
 				proposal = new AntCompletionProposal(replaceString.toString(), cursorPosition - prefix.length(), prefix.length(), replaceString.length(), null, displayString.toString(), AntEditorMessages.getString("AntEditorCompletionProcessor.39"), AntCompletionProposal.TAG_CLOSING_PROPOSAL); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
index 407712a..7220e50 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
@@ -263,7 +263,7 @@
 		boolean useSpaces = fEditor.isTabsToSpacesConversionEnabled();
 
 		for (int i = 0; i <= tabWidth; i++) {
-			StringBuffer prefix = new StringBuffer();
+			StringBuilder prefix = new StringBuilder();
 			if (useSpaces) {
 				for (int j = 0; j + i < tabWidth; j++) {
 					prefix.append(' ');
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
index 1eced9b..239d9d3 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
@@ -48,7 +48,7 @@
 		protected String readTag() throws IOException {
 			int intChar;
 			char c;
-			StringBuffer node = new StringBuffer();
+			StringBuilder node = new StringBuilder();
 
 			while (!complete && (intChar = reader.read()) != -1) {
 				c = (char) intChar;
@@ -81,7 +81,7 @@
 		protected String readTag() throws IOException {
 			int intChar;
 			char c;
-			StringBuffer node = new StringBuffer();
+			StringBuilder node = new StringBuilder();
 
 			while (!complete && (intChar = reader.read()) != -1) {
 				c = (char) intChar;
@@ -115,7 +115,7 @@
 		protected String readTag() throws IOException {
 			int intChar;
 			char c;
-			StringBuffer node = new StringBuffer();
+			StringBuilder node = new StringBuilder();
 
 			while (!complete && (intChar = reader.read()) != -1) {
 				c = (char) intChar;
@@ -333,7 +333,7 @@
 		@Override
 		protected String readTag() throws IOException {
 
-			StringBuffer node = new StringBuffer();
+			StringBuilder node = new StringBuilder();
 
 			boolean insideQuote = false;
 			int intChar;
@@ -472,7 +472,7 @@
 	}
 
 	private String indent(String canonicalIndent) {
-		StringBuffer indent = new StringBuffer(30);
+		StringBuilder indent = new StringBuilder(30);
 		for (int i = 0; i < depth; i++) {
 			indent.append(canonicalIndent);
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java
index df8a971..7b2e2ea 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java
@@ -237,7 +237,7 @@
 			return IAntCoreConstants.EMPTY_STRING;
 		}
 
-		StringBuffer buf = new StringBuffer();
+		StringBuilder buf = new StringBuilder();
 		buf.append(XmlDocumentFormatter.getLeadingWhitespace(node.getOffset(), document));
 		buf.append(XmlDocumentFormatter.createIndent());
 		return buf.toString();
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlTagFormatter.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlTagFormatter.java
index b10e41b..f27ea9e 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlTagFormatter.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlTagFormatter.java
@@ -117,7 +117,7 @@
 
 		@Override
 		public String toString() {
-			StringBuffer sb = new StringBuffer(500);
+			StringBuilder sb = new StringBuilder(500);
 			sb.append('<');
 			sb.append(this.getElementName());
 			if (this.attributeCount() > 0 || this.isClosed())
@@ -179,7 +179,7 @@
 		}
 
 		protected String wrapTag(Tag tag, FormattingPreferences prefs, String indent, String lineDelimiter) {
-			StringBuffer sb = new StringBuffer(1024);
+			StringBuilder sb = new StringBuilder(1024);
 			sb.append('<');
 			sb.append(tag.getElementName());
 			sb.append(' ');
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
index 3e8ebd5..1e08955 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
@@ -747,7 +747,7 @@
 		if (extns.length == 0) {
 			return IAntCoreConstants.XML_EXTENSION;
 		}
-		StringBuffer sb = new StringBuffer();
+		StringBuilder sb = new StringBuilder();
 		for (int i = 0; i < extns.length; i++) {
 			if (i > 0)
 				sb.append('|');
@@ -765,7 +765,7 @@
 	 * @since 3.8
 	 */
 	public static boolean isKnownAntFileName(String name) {
-		StringBuffer buf = new StringBuffer(".*.("); //$NON-NLS-1$
+		StringBuilder buf = new StringBuilder(".*.("); //$NON-NLS-1$
 		buf.append(getKnownBuildFileExtensionsAsPattern());
 		buf.append(")"); //$NON-NLS-1$
 		try {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java
index d6e0538..182921a 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java
@@ -53,7 +53,7 @@
 	 */
 	public static String buildHTMLFile(ILaunchConfiguration configuration) throws CoreException {
 		String name = getMainTypeName(configuration);
-		StringBuffer b = new StringBuffer();
+		StringBuilder b = new StringBuilder();
 		b.append("<!--" + BuildFileCreator.WARNING + " -->" + ExportUtil.NEWLINE); //$NON-NLS-1$ //$NON-NLS-2$
 		b.append("<html>" + ExportUtil.NEWLINE); //$NON-NLS-1$
 		b.append("    <body>" + ExportUtil.NEWLINE); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
index ede0315..489e62c 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
@@ -521,7 +521,7 @@
 	 * @return collection items separated with given separator
 	 */
 	public static String toString(Collection<String> c, String separator) {
-		StringBuffer b = new StringBuffer();
+		StringBuilder b = new StringBuilder();
 		for (Iterator<String> iter = c.iterator(); iter.hasNext();) {
 			b.append(iter.next());
 			b.append(separator);
@@ -622,7 +622,7 @@
 			// not possible to checkout files: not connected to version
 			// control plugin or hijacked files and made read-only, so
 			// collect error messages provided by validator and re-throw
-			StringBuffer message = new StringBuffer(status.getPlugin() + ": " //$NON-NLS-1$
+			StringBuilder message = new StringBuilder(status.getPlugin() + ": " //$NON-NLS-1$
 					+ status.getMessage() + NEWLINE);
 			if (status.isMultiStatus()) {
 				for (int i = 0; i < status.getChildren().length; i++) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java
index d886425..14c0b3e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java
@@ -101,7 +101,7 @@
 	private String getThreadText(AntThread thread) {
 		String name = thread.getName();
 		if (name != null) {
-			StringBuffer text = new StringBuffer(name);
+			StringBuilder text = new StringBuilder(name);
 			if (thread.isSuspended()) {
 				IBreakpoint[] breakpoints = thread.getBreakpoints();
 				if (breakpoints.length > 0) {
@@ -129,7 +129,7 @@
 	private String getStackFrameText(AntStackFrame frame) {
 		String name = frame.getName();
 		if (name != null) {
-			StringBuffer text = new StringBuffer(name);
+			StringBuilder text = new StringBuilder(name);
 			int lineNumber = frame.getLineNumber();
 			String lineNumberString = null;
 			if (lineNumber == 0) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java
index d6dce33..997b400 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java
@@ -193,7 +193,7 @@
 			targetsSelected = configTargets;
 		}
 		String[] targets = AntUtil.parseRunTargets(targetsSelected);
-		StringBuffer result = new StringBuffer(targets[0]);
+		StringBuilder result = new StringBuilder(targets[0]);
 		for (int i = 1; i < targets.length; i++) {
 			result.append(", "); //$NON-NLS-1$
 			result.append(targets[i]);
@@ -331,7 +331,7 @@
 	 */
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		if (!fAfterCleanTargetText.getText().equals(NOT_ENABLED)) {
 			buffer.append(IExternalToolConstants.BUILD_TYPE_FULL).append(',');
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
index c612961..4b4abf2 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
@@ -247,7 +247,7 @@
 	 * @return a unique name for the copy
 	 */
 	public static String getNewLaunchConfigurationName(IPath filePath, String projectName, String targetAttribute) {
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		if (projectName != null) {
 			buffer.append(projectName);
 			buffer.append(' ');
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntPropertiesTab.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntPropertiesTab.java
index efabcbe..819b3ba 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntPropertiesTab.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntPropertiesTab.java
@@ -203,7 +203,7 @@
 		items = fAntPropertiesBlock.getPropertyFiles();
 		String files = null;
 		if (items.length > 0) {
-			StringBuffer buff = new StringBuffer();
+			StringBuilder buff = new StringBuilder();
 			for (int i = 0; i < items.length; i++) {
 				String path = (String) items[i];
 				buff.append(path);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java
index 19ee584..ca03ea4 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java
@@ -96,7 +96,7 @@
 			IFile file = (IFile) resource;
 			if (AntUtil.isKnownAntFile(file)) {
 				String projectName = file.getProject().getName();
-				StringBuffer buffer = new StringBuffer(projectName);
+				StringBuilder buffer = new StringBuilder(projectName);
 				buffer.append(' ');
 				buffer.append(file.getName());
 				String name = buffer.toString().trim();
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
index 9d72573..bd40fb7 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
@@ -501,7 +501,7 @@
 
 		fOrderButton.setEnabled(checked.length > 1);
 
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		Iterator<AntTargetNode> iter = fOrderedTargets.iterator();
 		while (iter.hasNext()) {
 			buffer.append(iter.next().getTargetName());
@@ -578,7 +578,7 @@
 			if (exceptions[0] != null) {
 				IStatus exceptionStatus = exceptions[0].getStatus();
 				IStatus[] children = exceptionStatus.getChildren();
-				StringBuffer message = new StringBuffer(exceptions[0].getMessage());
+				StringBuilder message = new StringBuilder(exceptions[0].getMessage());
 				for (int i = 0; i < children.length; i++) {
 					message.append(' ');
 					IStatus childStatus = children[i];
@@ -760,7 +760,7 @@
 			return;
 		}
 
-		StringBuffer buff = new StringBuffer();
+		StringBuilder buff = new StringBuilder();
 		Iterator<AntTargetNode> iter = fOrderedTargets.iterator();
 		String targets = null;
 		while (iter.hasNext()) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java
index 121b668..e3964d3 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java
@@ -27,7 +27,7 @@
 
 	public AntAntNode(Task task, Attributes attributes) {
 		super(task);
-		StringBuffer label = new StringBuffer("ant "); //$NON-NLS-1$
+		StringBuilder label = new StringBuilder("ant "); //$NON-NLS-1$
 		fFile = attributes.getValue(IAntCoreConstants.DIR);
 		if (fFile != null) {
 			if (!FileUtils.isAbsolutePath(fFile)) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java
index b44a92a..6723b0d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java
@@ -156,7 +156,7 @@
 	 */
 	public static void setJavaClassPath(URL[] antClasspath) {
 
-		StringBuffer buff = new StringBuffer();
+		StringBuilder buff = new StringBuilder();
 		File file = null;
 		for (int i = 0; i < antClasspath.length; i++) {
 			try {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java
index 475285d..00fd232 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java
@@ -373,7 +373,7 @@
 	@Override
 	public String getElementPath() {
 		if (fElementPath == null) {
-			StringBuffer buffer = new StringBuffer();
+			StringBuilder buffer = new StringBuilder();
 			String buildFileName = getProjectNode().getBuildFileName();
 			if (buildFileName != null) {
 				buffer.append(buildFileName);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index 5cb0811..3af20b1 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
@@ -1026,7 +1026,7 @@
 	}
 
 	private String generateLabel(String taskName, Attributes attributes, String attributeName) {
-		StringBuffer label = new StringBuffer(taskName);
+		StringBuilder label = new StringBuilder(taskName);
 		String srcFile = attributes.getValue(attributeName);
 		if (srcFile != null) {
 			label.append(' ');
@@ -1046,7 +1046,7 @@
 			if (column <= 0) {
 				column = getLastCharColumn(line);
 				String lineText = fDocument.get(fDocument.getLineOffset(line - 1), column);
-				StringBuffer searchString = new StringBuffer("</"); //$NON-NLS-1$
+				StringBuilder searchString = new StringBuilder("</"); //$NON-NLS-1$
 				searchString.append(element.getName());
 				searchString.append('>');
 				int index = lineText.indexOf(searchString.toString());
@@ -1302,7 +1302,7 @@
 
 	private AntElementNode createProblemElement(SAXParseException exception) {
 		int lineNumber = exception.getLineNumber();
-		StringBuffer message = new StringBuffer(exception.getMessage());
+		StringBuilder message = new StringBuilder(exception.getMessage());
 		if (lineNumber != -1) {
 			message.append(AntModelMessages.AntModel_1 + lineNumber);
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
index faef885..c8e174d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
@@ -367,7 +367,7 @@
 	protected String loadPreviewContentFromFile(String filename) {
 		String line;
 		String separator = System.getProperty("line.separator"); //$NON-NLS-1$
-		StringBuffer buffer = new StringBuffer(512);
+		StringBuilder buffer = new StringBuilder(512);
 		BufferedReader reader = null;
 		try {
 			reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(filename)));
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathLabelProvider.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathLabelProvider.java
index ca27da4..8c39cc2 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathLabelProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathLabelProvider.java
@@ -80,7 +80,7 @@
 	public String getText(Object element) {
 		if (element instanceof IAntClasspathEntry) {
 			IAntClasspathEntry entry = (IAntClasspathEntry) element;
-			StringBuffer label = new StringBuffer(entry.getLabel());
+			StringBuilder label = new StringBuilder(entry.getLabel());
 			if (element instanceof GlobalClasspathEntries) {
 				if (((GlobalClasspathEntries) element).getType() == ClasspathModel.ANT_HOME) {
 					AntCorePreferences prefs = AntCorePlugin.getPlugin().getPreferences();
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index 2e94a4d..e910455 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
@@ -394,7 +394,7 @@
 	private String getStatusLineText(AntElementNode node) {
 		if (node instanceof AntProjectNode) {
 			AntProjectNode project = (AntProjectNode) node;
-			StringBuffer message = new StringBuffer(project.getBuildFileName());
+			StringBuilder message = new StringBuilder(project.getBuildFileName());
 			String description = project.getDescription();
 			if (description != null && description.length() > 0) {
 				message.append(": "); //$NON-NLS-1$
@@ -403,7 +403,7 @@
 			return message.toString();
 		} else if (node instanceof AntTargetNode) {
 			AntTargetNode target = (AntTargetNode) node;
-			StringBuffer message = new StringBuffer();
+			StringBuilder message = new StringBuilder();
 			Enumeration<String> depends = target.getTarget().getDependencies();
 			if (depends.hasMoreElements()) {
 				message.append(AntViewMessages.AntView_3);
