[SCM] eclipse - Powerful IDE written in java - Debian package. branch, master-3.6, updated. eclipse-ppa/maverick-211-g1303aae

Niels Thykier nthykier at alioth.debian.org
Fri May 13 14:40:25 UTC 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "eclipse - Powerful IDE written in java - Debian package.".

The branch, master-3.6 has been updated
       via  1303aaed109bda5eef317459e2e8a5f495264504 (commit)
       via  07bf15c8f600b2f5af26cf9b0c369922fd9a5698 (commit)
       via  f84212103f42fc4fb2568c56e813585951a99910 (commit)
      from  01c9c672e475ad61a614b0b273473a752a0a444d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1303aaed109bda5eef317459e2e8a5f495264504
Author: Niels Thykier <niels at thykier.net>
Date:   Fri May 13 16:37:57 2011 +0200

    Fix compilation issue due to missing import in patch

commit 07bf15c8f600b2f5af26cf9b0c369922fd9a5698
Author: Niels Thykier <niels at thykier.net>
Date:   Fri May 13 14:52:51 2011 +0200

    Remove Depends on swt jni from swt-gtk, we still ship our own

commit f84212103f42fc4fb2568c56e813585951a99910
Author: Niels Thykier <niels at thykier.net>
Date:   Fri May 13 13:55:07 2011 +0200

    Pull upstream patch for ant 1.8.2

-----------------------------------------------------------------------

Summary of changes:
 debian/control                            |    2 -
 debian/patches/bp-ant-1.8.2-support.patch | 3794 +++++++++++++++++++++++++++++
 debian/patches/series                     |    1 +
 3 files changed, 3795 insertions(+), 2 deletions(-)

diff --git a/debian/control b/debian/control
index d71a0e4..4018ea8 100644
--- a/debian/control
+++ b/debian/control
@@ -211,8 +211,6 @@ Architecture: any
 Depends: default-jre | java5-runtime | java6-runtime,
          libequinox-osgi-java (= ${source:Version}),
          libicu4j-4.2-java (>= 4.2),
-         libswt-gtk-3.6-jni (>= 3.6.2),
-         libswt-gtk-3.6-jni (<< 3.6.2+1~),
          ${misc:Depends},
          ${shlibs:Depends}
 Recommends: ${shlibs:Recommends}
diff --git a/debian/patches/bp-ant-1.8.2-support.patch b/debian/patches/bp-ant-1.8.2-support.patch
new file mode 100644
index 0000000..838e4a9
--- /dev/null
+++ b/debian/patches/bp-ant-1.8.2-support.patch
@@ -0,0 +1,3794 @@
+From c02e33ea8706fc928f71ac134c1ebafc82b46651 Mon Sep 17 00:00:00 2001
+From: Niels Thykier <niels at thykier.net>
+Date: Fri, 13 May 2011 13:21:46 +0200
+Subject: [PATCH] Backported patch for ant 1.8.2 support (#340426)
+Forwarded: yes
+Origin: upstream, https://bugs.eclipse.org/bugs/show_bug.cgi?id=340426
+Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=340426
+
+
+---
+ build.xml                            |    1 +
+ .../patches/bz340426-ant-1.8.2-support.patch       | 3757 ++++++++++++++++++++
+ 3 files changed, 3763 insertions(+), 0 deletions(-)
+ create mode 100644 eclipse-build/patches/bz340426-ant-1.8.2-support.patch
+
+diff --git a/eclipse-build/build.xml b/eclipse-build/build.xml
+index 6dc9b5d..85f3442 100644
+--- a/build.xml
++++ b/build.xml
+@@ -315,6 +315,7 @@
+ 		<!-- end eclipse-build-only patches -->
+ 		<!-- back-ported patches -->
+ 		<patch patchfile="${basedir}/patches/bz319476-compile-jar-in-jar-loader.patch" dir="${buildDirectory}/plugins/org.eclipse.jdt.ui" strip="0" />
++		<patch patchfile="${basedir}/patches/bz340426-ant-1.8.2-support.patch" dir="${buildDirectory}/" strip="1" />
+ 		<!-- end back-ported patches -->
+ 		<!-- Only build for one target (bug #293952) -->
+ 		<copy file="${buildConfigs}/eclipse-build-config/build.properties.in" tofile="${buildConfigs}/eclipse-build-config/build.properties" />
+diff --git a/eclipse-build/patches/bz340426-ant-1.8.2-support.patch b/eclipse-build/patches/bz340426-ant-1.8.2-support.patch
+new file mode 100644
+index 0000000..c1fa4d1
+--- /dev/null
++++ b/patches/bz340426-ant-1.8.2-support.patch
+@@ -0,0 +1,3758 @@
++From 904bdd71b806f1cb1cc0a8a60e88ab7ed0ac8314 Mon Sep 17 00:00:00 2001
++From: Niels Thykier <niels at thykier.net>
++Date: Fri, 13 May 2011 13:14:09 +0200
++Subject: [PATCH] Backport of ant 1.8.2 support for eclipse 3.6.2
++
++---
++ .../org/eclipse/ant/core/AntCorePreferences.java   |   69 ++++----
++ .../src/org/eclipse/ant/core/AntRunner.java        |    2 +-
++ .../src/org/eclipse/ant/core/ProjectInfo.java      |    8 +-
++ .../src/org/eclipse/ant/core/TargetInfo.java       |    6 +-
++ .../ant/internal/core/AntClasspathEntry.java       |    6 +-
++ .../org/eclipse/ant/internal/core/AntCoreUtil.java |    6 +-
++ .../org/eclipse/ant/internal/core/AntObject.java   |    4 +-
++ .../ant/internal/core/IAntCoreConstants.java       |   74 +++++++++-
++ .../internal/core/contentDescriber/AntHandler.java |    8 +-
++ .../ant/internal/core/ant/InternalAntRunner.java   |   11 +-
++ .../internal/core/ant/ProgressBuildListener.java   |   18 ++-
++ .../internal/launching/debug/AntDebugState.java    |    5 +-
++ .../runtime/logger/AntProcessBuildLogger.java      |    3 +-
++ .../launching/remote/InternalAntRunner.java        |   21 ++--
++ .../remote/logger/RemoteAntBuildLogger.java        |    7 +-
++ .../ant/internal/launching/AntLaunchingUtil.java   |    5 +-
++ .../ContributedClasspathEntriesEntry.java          |    5 +-
++ .../eclipse/ant/internal/ui/dtd/schema/Model.java  |    6 +-
++ .../internal/ui/editor/AntCompletionProposal.java  |    5 +-
++ .../eclipse/ant/internal/ui/editor/AntEditor.java  |    5 +-
++ .../ui/editor/AntEditorCompletionProcessor.java    |   41 +++--
++ .../editor/AntEditorSourceViewerConfiguration.java |    3 +-
++ .../ui/editor/TaskDescriptionProvider.java         |    9 +-
++ .../ui/editor/formatter/FormattingPreferences.java |    5 +-
++ .../ui/editor/formatter/XmlDocumentFormatter.java  |    5 +-
++ .../internal/ui/editor/formatter/XmlFormatter.java |    8 +-
++ .../ui/editor/outline/AntEditorMarkerUpdater.java  |    5 +-
++ .../templates/AntTemplatePreferencePage.java       |    5 +-
++ .../ant/internal/ui/editor/text/XMLTextHover.java  |   18 ++-
++ .../internal/ui/editor/utils/ProjectHelper.java    |    7 +-
++ .../antsupport/inputhandler/AntInputHandler.java   |    5 +-
++ .../org/eclipse/ant/internal/ui/AntUIPlugin.java   |    7 +-
++ .../org/eclipse/ant/internal/ui/AntUtil.java       |    7 +-
++ .../org/eclipse/ant/internal/ui/ColumnSorter.java  |    7 +-
++ .../ui/datatransfer/AntNewJavaProjectPage.java     |   11 +-
++ .../ant/internal/ui/datatransfer/AppletUtil.java   |    5 +-
++ .../internal/ui/datatransfer/BuildFileCreator.java |  144 +++++++++--------
++ .../internal/ui/datatransfer/EclipseClasspath.java |    9 +-
++ .../ant/internal/ui/datatransfer/ExportUtil.java   |    8 +-
++ .../ui/datatransfer/JavacTableLabelProvider.java   |    5 +-
++ .../ui/debug/model/AntDebugModelPresentation.java  |    5 +-
++ .../launchConfigurations/AntBuilderTargetsTab.java |    3 +-
++ .../AntJavaLaunchDelegate.java                     |    5 +-
++ .../ui/launchConfigurations/AntLaunchShortcut.java |    5 +-
++ .../ui/launchConfigurations/AntMainTab.java        |    5 +-
++ .../ui/launchConfigurations/SetTargetsDialog.java  |    5 +-
++ .../TargetTableLabelProvider.java                  |    5 +-
++ .../ui/launchConfigurations/TaskLinkManager.java   |    5 +-
++ .../eclipse/ant/internal/ui/model/AntAntNode.java  |    3 +-
++ .../ant/internal/ui/model/AntDefiningTaskNode.java |    5 +-
++ .../ant/internal/ui/model/AntElementNode.java      |   31 +---
++ .../ant/internal/ui/model/AntImportNode.java       |    5 +-
++ .../eclipse/ant/internal/ui/model/AntModel.java    |   10 +-
++ .../ant/internal/ui/model/AntModelProject.java     |  170 ++++++++++++++++----
++ .../ant/internal/ui/model/AntProjectNode.java      |    7 +-
++ .../ant/internal/ui/model/AntPropertyNode.java     |   17 +-
++ .../eclipse/ant/internal/ui/model/AntRefTable.java |   53 ++++++
++ .../ant/internal/ui/model/AntTargetNode.java       |    9 +-
++ .../ant/internal/ui/model/IAntModelConstants.java  |   13 +--
++ .../internal/ui/preferences/AddCustomDialog.java   |    9 +-
++ .../internal/ui/preferences/AntClasspathBlock.java |    9 +-
++ .../ui/preferences/AntObjectLabelProvider.java     |    5 +-
++ .../ui/preferences/AntPropertiesBlock.java         |    7 +-
++ .../internal/ui/preferences/ClasspathEntry.java    |    5 +-
++ .../ui/preferences/FileSelectionDialog.java        |    9 +-
++ .../ant/internal/ui/preferences/MessageLine.java   |    5 +-
++ .../LaunchConfigurationBuildfileChange.java        |    7 +-
++ .../org/eclipse/ant/internal/ui/views/AntView.java |    5 +-
++ .../views/actions/SearchForBuildFilesDialog.java   |    8 +-
++ .../externaltools/internal/ExternalToolsCore.java  |    6 +-
++ .../internal/IExternalToolConstants.java           |   10 +-
++ .../ProgramLaunchDelegate.java                     |    4 +-
++ .../ExternalToolsBuilderTab.java                   |    2 +-
++ .../launchConfigurations/ExternalToolsMainTab.java |   14 +-
++ .../internal/model/ExternalToolsPlugin.java        |    8 +-
++ .../internal/ui/BuilderPropertyPage.java           |    4 +-
++ 76 files changed, 672 insertions(+), 394 deletions(-)
++ create mode 100644 plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java
++
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
++index 61d38c4..ef9d1de 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2010 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -99,7 +99,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		}
++ 
++ 		public String toString() {
++-			return from.toString() + "->" + (to == null ? "" : to.toString()); //$NON-NLS-1$//$NON-NLS-2$
+++			return from.toString() + "->" + (to == null ? IAntCoreConstants.EMPTY_STRING : to.toString()); //$NON-NLS-1$
++ 		}
++ 	}
++ 
++@@ -206,7 +206,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreTasks(Preferences prefs) {
++ 		 String tasks = prefs.getString(IAntCoreConstants.PREFERENCE_TASKS);
++-		 if (tasks.equals("")) { //$NON-NLS-1$
+++		 if (tasks.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			 customTasks = new Task[0];
++ 		 } else {
++ 			 customTasks = extractTasks(prefs, getArrayFromString(tasks));
++@@ -215,7 +215,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreTypes(Preferences prefs) {
++ 		String types = prefs.getString(IAntCoreConstants.PREFERENCE_TYPES);
++-		if (types.equals("")) {//$NON-NLS-1$
+++		if (types.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			customTypes = new Type[0];
++ 		} else {
++ 			customTypes = extractTypes(prefs, getArrayFromString(types));
++@@ -224,14 +224,14 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreAntHomeEntries(Preferences prefs) {
++ 		String entries = prefs.getString("ant_urls"); //old constant //$NON-NLS-1$
++-		if (entries.equals("")) {//$NON-NLS-1$
+++		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			entries= prefs.getString(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES);
++ 		} else {
++ 			prefs.setToDefault("ant_urls"); //$NON-NLS-1$
++ 			antHomeEntries= migrateURLEntries(getArrayFromString(entries));
++ 			return;
++ 		}
++-		if (entries.equals("")) {//$NON-NLS-1$
+++		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			antHomeEntries= getDefaultAntHomeEntries();
++ 		} else {
++ 			antHomeEntries= extractEntries(getArrayFromString(entries));
++@@ -240,14 +240,14 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreAdditionalEntries(Preferences prefs) {
++ 		String entries = prefs.getString("urls"); //old constant //$NON-NLS-1$
++-		if (entries.equals("")) {//$NON-NLS-1$
+++		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			entries = prefs.getString(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES);
++ 		} else {
++ 			prefs.setToDefault("urls"); //$NON-NLS-1$
++ 			additionalEntries= migrateURLEntries(getArrayFromString(entries));
++ 			return;
++ 		}
++-		if (entries.equals("")) {//$NON-NLS-1$
+++		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			IAntClasspathEntry toolsJarEntry= getToolsJarEntry();
++ 			List userLibs= getUserLibraries();
++ 			if (toolsJarEntry == null) {
++@@ -314,7 +314,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreCustomProperties(Preferences prefs) {
++ 		String properties = prefs.getString(IAntCoreConstants.PREFERENCE_PROPERTIES);
++-		if (properties.equals("")) {//$NON-NLS-1$
+++		if (properties.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			customProperties = new Property[0];
++ 		} else {
++ 			customProperties = extractProperties(prefs, getArrayFromString(properties));
++@@ -323,7 +323,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	
++ 	private void restoreCustomPropertyFiles(Preferences prefs) {
++ 		String propertyFiles= prefs.getString(IAntCoreConstants.PREFERENCE_PROPERTY_FILES);
++-		if (propertyFiles.equals("")) { //$NON-NLS-1$
+++		if (propertyFiles.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			customPropertyFiles= new String[0];
++ 		} else {
++ 			customPropertyFiles= getArrayFromString(propertyFiles);
++@@ -342,7 +342,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 			task.setTaskName(taskName);
++ 			task.setClassName(values[0]);
++ 			String library= values[1];
++-			if (library.startsWith("file:")) { //$NON-NLS-1$
+++			if (library.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
++ 				//old format where URLs were persisted
++ 				library= library.substring(5);
++ 			}
++@@ -364,7 +364,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 			type.setTypeName(typeName);
++ 			type.setClassName(values[0]);
++ 			String library= values[1];
++-			if (library.startsWith("file:")) { //$NON-NLS-1$
+++			if (library.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
++ 				//old format where URLs were persisted
++ 				library= library.substring(5);
++ 			}
++@@ -552,7 +552,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 				continue;
++ 			}
++ 			Task task = new Task();
++-			task.setTaskName(element.getAttribute(AntCorePlugin.NAME));
+++			task.setTaskName(element.getAttribute(IAntCoreConstants.NAME));
++ 			task.setClassName(element.getAttribute(AntCorePlugin.CLASS));
++ 			
++ 			configureAntObject(result, element, task, task.getTaskName(), InternalCoreAntMessages.AntCorePreferences_No_library_for_task);
++@@ -587,7 +587,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 				continue;
++ 			}
++ 			Type type = new Type();
++-			type.setTypeName(element.getAttribute(AntCorePlugin.NAME));
+++			type.setTypeName(element.getAttribute(IAntCoreConstants.NAME));
++ 			type.setClassName(element.getAttribute(AntCorePlugin.CLASS));
++ 			
++ 			configureAntObject(result, element, type, type.getTypeName(), InternalCoreAntMessages.AntCorePreferences_No_library_for_type);
++@@ -708,11 +708,11 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 			if (!relevantRunningHeadless(element)) {
++ 				continue;
++ 			}
++-			String name = element.getAttribute(AntCorePlugin.NAME);
+++			String name = element.getAttribute(IAntCoreConstants.NAME);
++ 			if (name == null) {
++ 				continue;
++ 			}
++-			String value = element.getAttribute(AntCorePlugin.VALUE);
+++			String value = element.getAttribute(IAntCoreConstants.VALUE);
++ 			Property property= null;
++ 			if (value != null) {
++ 				property = new Property(name, value);
++@@ -746,16 +746,17 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	 * @since 3.0
++ 	 */
++ 	public IAntClasspathEntry getToolsJarEntry(IPath javaHomePath) {
++-		if ("jre".equalsIgnoreCase(javaHomePath.lastSegment())) { //$NON-NLS-1$
++-			javaHomePath = javaHomePath.removeLastSegments(1);
+++		IPath newjh = javaHomePath;
+++		if ("jre".equalsIgnoreCase(newjh.lastSegment())) { //$NON-NLS-1$
+++			newjh = newjh.removeLastSegments(1);
++ 		}
++-		javaHomePath= javaHomePath.append("lib").append("tools.jar"); //$NON-NLS-1$ //$NON-NLS-2$
++-		File tools= javaHomePath.toFile();
+++		newjh= newjh.append("lib").append("tools.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+++		File tools= newjh.toFile();
++ 		if (!tools.exists()) {
++ 			//attempt to find in the older 1.1.* 
++-			javaHomePath= javaHomePath.removeLastSegments(1);
++-			javaHomePath= javaHomePath.append("classes.zip"); //$NON-NLS-1$
++-			tools= javaHomePath.toFile();
+++			newjh= newjh.removeLastSegments(1);
+++			newjh= newjh.append("classes.zip"); //$NON-NLS-1$
+++			tools= newjh.toFile();
++ 			if (!tools.exists()) {
++ 				return null;
++ 			}
++@@ -892,7 +893,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	private void addLibraries(Bundle source, List destination) throws IOException, MalformedURLException {
++ 		ManifestElement[] libraries = null;
++ 		try {
++-			libraries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, (String) source.getHeaders("").get(Constants.BUNDLE_CLASSPATH)); //$NON-NLS-1$
+++			libraries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, (String) source.getHeaders(IAntCoreConstants.EMPTY_STRING).get(Constants.BUNDLE_CLASSPATH));
++ 		} catch (BundleException e) {
++ 			IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_MALFORMED_URL, InternalCoreAntMessages.AntCorePreferences_0, e);
++ 			AntCorePlugin.getPlugin().getLog().log(status);
++@@ -1503,13 +1504,13 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	 */
++ 	protected String[] getArrayFromString(String list) {
++ 		String separator= ","; //$NON-NLS-1$
++-		if (list == null || list.trim().equals("")) { //$NON-NLS-1$
+++		if (list == null || list.trim().equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			return new String[0];
++ 		}
++ 		ArrayList result = new ArrayList();
++ 		for (StringTokenizer tokens = new StringTokenizer(list, separator); tokens.hasMoreTokens();) {
++ 			String token = tokens.nextToken().trim();
++-			if (!token.equals("")) { //$NON-NLS-1$
+++			if (!token.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 				result.add(token);
++ 			}
++ 		}
++@@ -1547,7 +1548,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		}	
++ 		
++ 		if (customTasks.length == 0) {
++-			prefs.setValue(IAntCoreConstants.PREFERENCE_TASKS, ""); //$NON-NLS-1$
+++			prefs.setValue(IAntCoreConstants.PREFERENCE_TASKS, IAntCoreConstants.EMPTY_STRING);
++ 			return;
++ 		}
++ 		StringBuffer tasks = new StringBuffer();
++@@ -1569,7 +1570,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		}	
++ 				
++ 		if (customTypes.length == 0) {
++-			prefs.setValue(IAntCoreConstants.PREFERENCE_TYPES, ""); //$NON-NLS-1$
+++			prefs.setValue(IAntCoreConstants.PREFERENCE_TYPES, IAntCoreConstants.EMPTY_STRING);
++ 			return;
++ 		}
++ 		StringBuffer types = new StringBuffer();
++@@ -1591,7 +1592,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		}
++ 		
++ 		if (customProperties.length == 0) {
++-			prefs.setValue(IAntCoreConstants.PREFERENCE_PROPERTIES, ""); //$NON-NLS-1$
+++			prefs.setValue(IAntCoreConstants.PREFERENCE_PROPERTIES, IAntCoreConstants.EMPTY_STRING);
++ 			return;
++ 		}
++ 		StringBuffer properties = new StringBuffer();
++@@ -1604,8 +1605,8 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	}
++ 
++ 	protected void updateAdditionalEntries(Preferences prefs) {
++-		prefs.setValue("urls", ""); //old constant removed  //$NON-NLS-1$//$NON-NLS-2$
++-		String serialized= ""; //$NON-NLS-1$
+++		prefs.setValue("urls", IAntCoreConstants.EMPTY_STRING); //old constant removed  //$NON-NLS-1$
+++		String serialized= IAntCoreConstants.EMPTY_STRING;
++ 		IAntClasspathEntry toolsJarEntry= getToolsJarEntry();
++ 		List userLibs= getUserLibraries();
++ 		if (userLibs == null) {
++@@ -1635,7 +1636,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		
++ 		prefs.setValue(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES, serialized);
++ 		
++-		String prefAntHome= ""; //$NON-NLS-1$
+++		String prefAntHome= IAntCoreConstants.EMPTY_STRING;
++ 		if (antHome != null && !antHome.equals(getDefaultAntHome())) {
++ 			prefAntHome= antHome;
++ 		} 
++@@ -1643,7 +1644,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 	}
++ 	
++ 	protected void updateAntHomeEntries(Preferences prefs) {
++-		prefs.setValue("ant_urls", ""); //old constant removed  //$NON-NLS-1$//$NON-NLS-2$
+++		prefs.setValue("ant_urls", IAntCoreConstants.EMPTY_STRING); //old constant removed  //$NON-NLS-1$
++ 		
++ 		//see if the custom entries are just the default entries
++ 		IAntClasspathEntry[] defaultEntries= getDefaultAntHomeEntries();
++@@ -1660,7 +1661,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
++ 		if (dflt) {
++ 			//always want to recalculate the default Ant urls
++ 			//to pick up any changes in the default Ant classpath
++-			prefs.setValue(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES, ""); //$NON-NLS-1$
+++			prefs.setValue(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES, IAntCoreConstants.EMPTY_STRING);
++ 			return;
++ 		}
++ 		StringBuffer entries = new StringBuffer();
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
++index edddfbf..2797399 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
++@@ -340,7 +340,7 @@ public class AntRunner implements IApplication {
++ 			
++ 			if (buildLoggerClassName == null) {
++ 				//indicate that the default logger is not to be used
++-				buildLoggerClassName= ""; //$NON-NLS-1$
+++				buildLoggerClassName= IAntCoreConstants.EMPTY_STRING;
++ 			}
++ 			// add build logger
++ 			Method addBuildLogger = classInternalAntRunner.getMethod("addBuildLogger", new Class[] { String.class }); //$NON-NLS-1$
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
++index 41b1605..0db8c2a 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2008 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,8 @@
++  *******************************************************************************/
++ package org.eclipse.ant.core;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
+++
++ 
++ /**
++  * Represents information about a project within an Ant build file.
++@@ -28,12 +30,12 @@ public class ProjectInfo {
++ 	 * Create a project information
++ 	 * 
++ 	 * @param name project name
++-	 * @param description a brief explanation of the project's purpose 		or
+++	 * @param description a brief explanation of the project's purpose or
++ 	 * <code>null</code> if not specified
++ 	 */
++ 	/*package*/
++ 	ProjectInfo(String name, String description) {
++-		this.name = name == null ? "" : name; //$NON-NLS-1$
+++		this.name = name == null ? IAntCoreConstants.EMPTY_STRING : name;
++ 		this.description = description;
++ 	}
++ 
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
++index bfec707..7eede73 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2008 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,8 @@
++  *******************************************************************************/
++ package org.eclipse.ant.core;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
+++
++ 
++ /**
++  * Represents information about a target within an Ant build file.
++@@ -38,7 +40,7 @@ public class TargetInfo {
++ 	 */
++ 	/*package*/
++ 	TargetInfo(ProjectInfo project, String name, String description, String[] dependencies, boolean isDefault) {
++-		this.name = name == null ? "" : name; //$NON-NLS-1$
+++		this.name = name == null ? IAntCoreConstants.EMPTY_STRING : name;
++ 		this.description = description;
++ 		this.project = project;
++ 		this.dependencies = dependencies;
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
++index 45d19ec..9069438 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -42,10 +42,10 @@ public class AntClasspathEntry implements IAntClasspathEntry {
++ 		}
++ 		try {
++ 			String expanded = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(entryString);
++-			return new URL("file:" + expanded); //$NON-NLS-1$
+++			return new URL(IAntCoreConstants.FILE_PROTOCOL + expanded);
++ 		} catch (CoreException e) {
++ 			try {
++-				return new URL("file:" + entryString); //$NON-NLS-1$
+++				return new URL(IAntCoreConstants.FILE_PROTOCOL + entryString);
++ 			} catch (MalformedURLException e1) {
++ 				return null;
++ 			}
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
++index 483b4b3..0e54eeb 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
++@@ -73,12 +73,12 @@ public class AntCoreUtil {
++ 		}
++ 		commands.remove(index);
++ 		if (index == commands.size()) {// if this is the last command
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		
++ 		String command = (String) commands.get(index);
++ 		if (command.startsWith("-")) { //new parameter //$NON-NLS-1$
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		commands.remove(index);
++ 		return command;
++@@ -94,7 +94,7 @@ public class AntCoreUtil {
++ 				int posEq = name.indexOf("="); //$NON-NLS-1$
++ 				if (posEq == 0) {
++ 					value= name.substring(1);
++-					name= ""; //$NON-NLS-1$
+++					name= IAntCoreConstants.EMPTY_STRING;
++ 				} else if (posEq > 0 && posEq != name.length() - 1) {
++ 					value = name.substring(posEq + 1).trim();
++ 					name = name.substring(0, posEq);
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
++index 2b0fc00..30ab90f 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2006 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -82,7 +82,7 @@ public abstract class AntObject {
++ 	 * @see java.lang.Object#toString()
++ 	 */
++ 	public String toString() {
++-		if (fURI == null || fURI.equals("") || fURI.equals("antlib:org.apache.tools.ant")) {  //$NON-NLS-1$//$NON-NLS-2$
+++		if (fURI == null || fURI.equals(IAntCoreConstants.EMPTY_STRING) || fURI.equals("antlib:org.apache.tools.ant")) {  //$NON-NLS-1$
++             return fName;
++         }
++ 		return fURI + ':' + fName;
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
++index 30c2dbc..1c84381 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,8 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.core;
++ 
+++import org.eclipse.ant.core.AntCorePlugin;
+++
++ 
++ /**
++  * Common constants.
++@@ -43,4 +45,74 @@ public interface IAntCoreConstants {
++ 	public static final String PREFERENCE_PROPERTIES = "properties"; //$NON-NLS-1$
++ 	public static final String PREFERENCE_PROPERTY_FILES = "propertyfiles"; //$NON-NLS-1$
++ 	public static final String PREFIX_PROPERTY = "property."; //$NON-NLS-1$
+++
+++	/**
+++	 * Constant for the word 'default'
+++	 * <br><br>
+++	 * Value is: <code>default</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String DEFAULT = "default"; //$NON-NLS-1$
+++
+++	/**
+++	 * Constant for the word 'dir'
+++	 * <br><br>
+++	 * Value is: <code>dir</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String DIR = "dir"; //$NON-NLS-1$
+++	
+++	/**
+++	 * Constant for the empty {@link String}
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+++	
+++	/**
+++	 * Constant for the word 'file'
+++	 * <br><br>
+++	 * Value is: <code>file</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String FILE = "file"; //$NON-NLS-1$
+++
+++	/**
+++	 * Constant representing a file URL protocol
+++	 * <br><br>
+++	 * Value is: <code>file:</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String FILE_PROTOCOL = "file:"; //$NON-NLS-1$
+++	
+++	/**
+++	 * Constant for the word 'name'
+++	 * <br><br>
+++	 * Value is: <code>name</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String NAME = AntCorePlugin.NAME;
+++
+++	/**
+++	 * Constant for the word 'value'
+++	 * <br><br>
+++	 * Value is: <code>value</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String VALUE = AntCorePlugin.VALUE;
+++
+++	/**
+++	 * Constant for the word 'description'
+++	 * <br><br>
+++	 * Value is: <code>description</code>
+++	 * 
+++	 * @since org.eclipse.ant.core 3.2.200
+++	 */
+++	public static final String DESCRIPTION = "description"; //$NON-NLS-1$
++ }
++diff --git a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
++index 22d5b4b..2a48c60 100644
++--- a/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
+++++ b/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2006 IBM Corporation and others.
+++ * Copyright (c) 2004, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -18,6 +18,7 @@ import javax.xml.parsers.ParserConfigurationException;
++ import javax.xml.parsers.SAXParser;
++ import javax.xml.parsers.SAXParserFactory;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.xml.sax.Attributes;
++ import org.xml.sax.InputSource;
++ import org.xml.sax.SAXException;
++@@ -55,7 +56,6 @@ public final class AntHandler extends DefaultHandler {
++         }
++     }
++ 
++-    private static final String DEFAULT_ATTRIBUTE= "default"; //$NON-NLS-1$
++     private static final String PROJECT = "project"; //$NON-NLS-1$
++     private static final String TARGET= "target"; //$NON-NLS-1$
++     private static final String MACRODEF= "macrodef"; //$NON-NLS-1$
++@@ -141,7 +141,7 @@ public final class AntHandler extends DefaultHandler {
++      * @see org.xml.sax.helpers.DefaultHandler#resolveEntity(java.lang.String, java.lang.String)
++      */
++     public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
++-        return new InputSource(new StringReader("")); //$NON-NLS-1$
+++        return new InputSource(new StringReader(IAntCoreConstants.EMPTY_STRING));
++     }
++ 
++     /*
++@@ -158,7 +158,7 @@ public final class AntHandler extends DefaultHandler {
++                 throw new StopParsingException();
++             }
++             if (attributes != null) {
++-                fDefaultAttributeFound= attributes.getValue(DEFAULT_ATTRIBUTE) != null;
+++                fDefaultAttributeFound= attributes.getValue(IAntCoreConstants.DEFAULT) != null;
++                 if (fDefaultAttributeFound) {
++                     throw new StopParsingException();
++                 }
++diff --git a/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
++index 4b69c48..752c21a 100644
++--- a/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++++ b/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+++ *  Copyright (c) 2000, 2011 IBM Corporation and others.
++  *  All rights reserved. This program and the accompanying materials
++  *  are made available under the terms of the Eclipse Public License v1.0
++  *  which accompanies this distribution, and is available at
++@@ -55,6 +55,7 @@ import org.eclipse.ant.core.Type;
++ import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger;
++ import org.eclipse.ant.internal.core.AntCoreUtil;
++ import org.eclipse.ant.internal.core.AntSecurityManager;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.runtime.FileLocator;
++ import org.eclipse.core.runtime.IPath;
++@@ -739,7 +740,7 @@ public class InternalAntRunner {
++ 	private BuildLogger createLogger() {
++ 		if (loggerClassname == null) {
++ 			buildLogger= new DefaultLogger();
++-		} else if (!"".equals(loggerClassname)) { //$NON-NLS-1$
+++		} else if (!IAntCoreConstants.EMPTY_STRING.equals(loggerClassname)) {
++ 			try {
++ 				buildLogger = (BuildLogger) (Class.forName(loggerClassname).newInstance());
++ 			} catch (ClassCastException e) {
++@@ -837,8 +838,8 @@ public class InternalAntRunner {
++ 			project.log(message, priority);	
++ 		} else {
++ 			if (buildListeners != null) {
++-				project = new Project();
++-				BuildEvent event = new BuildEvent(project);
+++				Project p = new Project();
+++				BuildEvent event = new BuildEvent(p);
++ 				event.setMessage(message, priority);
++ 				//notify the build listeners that are not registered as
++ 				//no project existed
++@@ -1163,7 +1164,7 @@ public class InternalAntRunner {
++ 		if (p < 0) { return; }
++ 
++ 		// remove everything preceding that last '-arg'
++-		String s = ""; //$NON-NLS-1$
+++		String s = IAntCoreConstants.EMPTY_STRING;
++ 		for (int i = 0; i <= p; i++) {
++ 			s += " " + ((String) commands.get(0)); //$NON-NLS-1$
++ 			commands.remove(0);
++diff --git a/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java b/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
++index f192299..c069c4c 100644
++--- a/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
+++++ b/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+++ *  Copyright (c) 2000, 2011 IBM Corporation and others.
++  *  All rights reserved. This program and the accompanying materials
++  *  are made available under the terms of the Eclipse Public License v1.0
++  *  which accompanies this distribution, and is available at
++@@ -28,6 +28,7 @@ import org.apache.tools.ant.Task;
++ import org.apache.tools.ant.taskdefs.Ant;
++ import org.apache.tools.ant.taskdefs.CallTarget;
++ import org.eclipse.ant.core.AntCorePlugin;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.core.runtime.IProgressMonitor;
++ import org.eclipse.core.runtime.NullProgressMonitor;
++ import org.eclipse.core.runtime.OperationCanceledException;
++@@ -94,10 +95,11 @@ public class ProgressBuildListener implements BuildListener {
++ 		projects = new HashMap();
++ 		mainProject = project;
++ 		ProjectMonitors monitors = new ProjectMonitors();
++-		if (monitor == null) {
++-			monitor= new NullProgressMonitor();
+++		IProgressMonitor localmonitor = monitor;
+++		if (localmonitor == null) {
+++			localmonitor= new NullProgressMonitor();
++ 		}
++-		monitors.setMainMonitor(monitor);
+++		monitors.setMainMonitor(localmonitor);
++ 		projects.put(mainProject, monitors);
++ 		List targets= new ArrayList(targetNames.size());
++ 		for (int i = 0; i < targetNames.size(); i++) {
++@@ -108,7 +110,7 @@ public class ProgressBuildListener implements BuildListener {
++ 			}
++ 		}
++ 		int work = computeWork(targets);
++-		monitors.getMainMonitor().beginTask("", work);  //$NON-NLS-1$
+++		monitors.getMainMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
++ 	}
++ 
++ 	/* (non-Javadoc)
++@@ -190,7 +192,7 @@ public class ProgressBuildListener implements BuildListener {
++ 
++ 		monitors.setTargetMonitor(subMonitorFor(monitors.getMainMonitor(), 1));
++ 		int work = (target != null) ? target.getTasks().length : 100;
++-		monitors.getTargetMonitor().beginTask("", work);  //$NON-NLS-1$
+++		monitors.getTargetMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
++ 	}
++ 
++ 	protected ProjectMonitors createMonitors(Project currentProject, Target target) {
++@@ -209,7 +211,7 @@ public class ProgressBuildListener implements BuildListener {
++ 			parentProject = null;
++ 			monitors.setMainMonitor(subMonitorFor(parentMonitors.getTaskMonitor(), 1));
++ 		}
++-		monitors.getMainMonitor().beginTask("", work);  //$NON-NLS-1$
+++		monitors.getMainMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
++ 		projects.put(currentProject, monitors);
++ 		return monitors;
++ 	}
++@@ -255,7 +257,7 @@ public class ProgressBuildListener implements BuildListener {
++ 		}
++ 		currentTaskThread= Thread.currentThread();
++ 		monitors.setTaskMonitor(subMonitorFor(monitors.getTargetMonitor(), 1));
++-		monitors.getTaskMonitor().beginTask("", 1);  //$NON-NLS-1$
+++		monitors.getTaskMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, 1);
++ 		// If this script is calling another one, track the project chain.
++ 		if (task instanceof Ant) {
++ 			parentProject = currentProject;
++diff --git a/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java b/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
++index 27592ec..d480a1d 100644
++--- a/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
+++++ b/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
++@@ -24,6 +24,7 @@ import org.apache.tools.ant.Project;
++ import org.apache.tools.ant.Target;
++ import org.apache.tools.ant.Task;
++ import org.apache.tools.ant.taskdefs.MacroInstance;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.debug.model.DebugMessageIds;
++ 
++ public class AntDebugState {
++@@ -366,7 +367,7 @@ public class AntDebugState {
++         }
++         
++ 		if (!isAfterTaskEvent()) {
++-			appendToStack(stackRepresentation, targetExecuting.getName(), "", getLocation(targetExecuting)); //$NON-NLS-1$
+++			appendToStack(stackRepresentation, targetExecuting.getName(), IAntCoreConstants.EMPTY_STRING, getLocation(targetExecuting));
++ 		}
++ 		for (int i = tasks.size() - 1; i >= 0 ; i--) {
++ 			Task task= (Task) tasks.get(i);
++@@ -406,7 +407,7 @@ public class AntDebugState {
++ 	     	for (int i = startIndex; i <= dependancyStackDepth; i++) {
++ 	     		stackTarget= (Target) buildSequence.get(i);
++ 	            if (stackTarget.dependsOn(targetExecuting.getName())) {
++-	     		    appendToStack(stackRepresentation, stackTarget.getName(), "", getLocation(stackTarget)); //$NON-NLS-1$
+++	     		    appendToStack(stackRepresentation, stackTarget.getName(), IAntCoreConstants.EMPTY_STRING, getLocation(stackTarget));
++ 	            }
++ 	     	}
++ 	     }
++diff --git a/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java b/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
++index f8acbe4..9dc2adb 100644
++--- a/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
+++++ b/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
++@@ -21,6 +21,7 @@ import org.apache.tools.ant.Location;
++ import org.apache.tools.ant.Project;
++ import org.apache.tools.ant.Target;
++ import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.AntLaunch;
++ import org.eclipse.ant.internal.launching.AntLaunching;
++ import org.eclipse.ant.internal.launching.AntLaunchingUtil;
++@@ -217,7 +218,7 @@ public class AntProcessBuildLogger extends NullBuildLogger {
++     				}
++     				line = r.readLine();
++     			}
++-    			logMessage("", event, Project.MSG_ERR); //$NON-NLS-1$
+++    			logMessage(IAntCoreConstants.EMPTY_STRING, event, Project.MSG_ERR);
++     		} catch (IOException e) {
++     		}
++         }
++diff --git a/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java b/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
++index 1119f39..990a5e6 100644
++--- a/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
+++++ b/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * Portions Copyright  2000-2005 The Apache Software Foundation
++  * All rights reserved. This program and the accompanying materials are made 
++  * available under the terms of the Apache Software License v2.0 which 
++@@ -46,6 +46,7 @@ import org.apache.tools.ant.Target;
++ import org.apache.tools.ant.Task;
++ import org.apache.tools.ant.TaskAdapter;
++ import org.apache.tools.ant.util.FileUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.remote.logger.RemoteAntBuildLogger;
++ 
++ /**
++@@ -222,7 +223,7 @@ public class InternalAntRunner {
++ 		//notify the logger that project help message are coming
++ 		//since there is no buildstarted or targetstarted to 
++ 		//to be used to establish the connection
++-		logMessage(project, "", MSG_PROJECT_HELP); //$NON-NLS-1$
+++		logMessage(project, IAntCoreConstants.EMPTY_STRING, MSG_PROJECT_HELP);
++ 		// find the target with the longest name
++ 		int maxLength = 0;
++ 		Enumeration ptargets = project.getTargets().elements();
++@@ -255,7 +256,7 @@ public class InternalAntRunner {
++ 		Collections.sort(topDescriptions);
++ 		
++ 		String defaultTargetName = project.getDefaultTarget();
++-		if (defaultTargetName != null && !"".equals(defaultTargetName)) { // shouldn't need to check but... //$NON-NLS-1$
+++		if (defaultTargetName != null && !IAntCoreConstants.EMPTY_STRING.equals(defaultTargetName)) { // shouldn't need to check but...
++ 			List defaultName = new ArrayList(1);
++ 			List defaultDesc = null;
++ 			defaultName.add(defaultTargetName);
++@@ -521,7 +522,7 @@ public class InternalAntRunner {
++ 	private BuildLogger createLogger() {
++ 		if (loggerClassname == null) {
++ 			buildLogger= new DefaultLogger();
++-		} else if (!"".equals(loggerClassname)) { //$NON-NLS-1$
+++		} else if (!IAntCoreConstants.EMPTY_STRING.equals(loggerClassname)) {
++ 			try {
++ 				buildLogger = (BuildLogger) (Class.forName(loggerClassname).newInstance());
++ 			} catch (ClassCastException e) {
++@@ -586,8 +587,8 @@ public class InternalAntRunner {
++ 			project.log(message, priority);	
++ 		} else {
++ 			if (buildListeners != null) {
++-				project = new Project();
++-				BuildEvent event = new BuildEvent(project);
+++				Project p = new Project();
+++				BuildEvent event = new BuildEvent(p);
++ 				event.setMessage(message, priority);
++ 				//notify the build listeners that are not registered as
++ 				//no project existed
++@@ -879,7 +880,7 @@ public class InternalAntRunner {
++ 		if (p < 0) { return; }
++ 
++ 		// remove everything preceding that last '-arg'
++-		String s = ""; //$NON-NLS-1$
+++		String s = IAntCoreConstants.EMPTY_STRING;
++ 		for (int i = 0; i <= p; i++) {
++ 			s += " " + ((String) commands.get(0)); //$NON-NLS-1$
++ 			commands.remove(0);
++@@ -981,7 +982,7 @@ public class InternalAntRunner {
++ 				int posEq = name.indexOf("="); //$NON-NLS-1$
++ 				if (posEq == 0) {
++ 					value= name.substring(1);
++-					name= ""; //$NON-NLS-1$
+++					name= IAntCoreConstants.EMPTY_STRING;
++ 				} else if (posEq > 0 && posEq != name.length() - 1) {
++ 					value = name.substring(posEq + 1).trim();
++ 					name = name.substring(0, posEq);
++@@ -1138,12 +1139,12 @@ public class InternalAntRunner {
++ 		}
++ 		commands.remove(index);
++ 		if (index == commands.size()) {// if this is the last command
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		
++ 		String command = (String) commands.get(index);
++ 		if (command.startsWith("-")) { //new parameter //$NON-NLS-1$
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		
++ 		commands.remove(index);
++diff --git a/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java b/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
++index fcaa8dd..95aad77 100644
++--- a/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
+++++ b/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2003, 2009 IBM Corporation and others.
+++ * Copyright (c) 2003, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -29,6 +29,7 @@ import org.apache.tools.ant.Location;
++ import org.apache.tools.ant.Project;
++ import org.apache.tools.ant.Target;
++ import org.apache.tools.ant.util.StringUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.debug.AntDebugState;
++ import org.eclipse.ant.internal.launching.remote.AntSecurityException;
++ import org.eclipse.ant.internal.launching.remote.InternalAntRunner;
++@@ -55,7 +56,7 @@ public class RemoteAntBuildLogger extends DefaultLogger {
++     /**
++      * Host to connect to, default is the localhost
++      */
++-    protected String fHost= ""; //$NON-NLS-1$
+++    protected String fHost= IAntCoreConstants.EMPTY_STRING;
++     /**
++      * Port to connect to.
++      */
++@@ -311,7 +312,7 @@ public class RemoteAntBuildLogger extends DefaultLogger {
++         StringBuffer message;
++         String taskName= event.getTask().getTaskName();
++         if (taskName != null && taskName.equals(fLastTaskName)) {
++-            taskName= ""; //$NON-NLS-1$
+++            taskName= IAntCoreConstants.EMPTY_STRING;
++         } else {
++             fLastTaskName= taskName;
++         }
++diff --git a/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java b/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
++index 3acfd09..9d59fb5 100644
++--- a/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
+++++ b/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2010 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -21,6 +21,7 @@ import java.util.StringTokenizer;
++ 
++ import org.apache.tools.ant.BuildException;
++ import org.apache.tools.ant.util.FileUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.launchConfigurations.AntHomeClasspathEntry;
++ import org.eclipse.ant.internal.launching.launchConfigurations.AntProcess;
++ import org.eclipse.ant.internal.launching.launchConfigurations.RemoteAntRuntimeProcess;
++@@ -254,7 +255,7 @@ public final class AntLaunchingUtil {
++ 		for (int i = 0; i < entries.length; i++) {
++ 			IRuntimeClasspathEntry entry = entries[i];
++ 			try {
++-				urls[i] = new URL("file:" + entry.getLocation()); //$NON-NLS-1$
+++				urls[i] = new URL(IAntCoreConstants.FILE_PROTOCOL + entry.getLocation());
++ 			} catch (MalformedURLException e) {
++ 				throw new CoreException(new Status(IStatus.ERROR, AntLaunching
++ 						.getUniqueIdentifier(), AntLaunching.INTERNAL_ERROR,
++diff --git a/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java b/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
++index 71ac04c..09c42e0 100644
++--- a/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
+++++ b/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -21,6 +21,7 @@ import java.util.List;
++ import org.eclipse.ant.core.AntCorePlugin;
++ import org.eclipse.ant.core.AntCorePreferences;
++ import org.eclipse.ant.core.IAntClasspathEntry;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.AntLaunching;
++ import org.eclipse.ant.internal.launching.AntLaunchingUtil;
++ import org.eclipse.core.runtime.CoreException;
++@@ -155,7 +156,7 @@ public class ContributedClasspathEntriesEntry extends AbstractRuntimeClasspathEn
++                    continue;
++                 }
++                 String urlFileName= bundleURL.getFile();
++-                if (urlFileName.startsWith("file:")) { //$NON-NLS-1$
+++                if (urlFileName.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
++                     try {
++                         urlFileName= new URL(urlFileName).getFile();
++                         if (urlFileName.endsWith("!/")) { //$NON-NLS-1$
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java
++index 53ff464..9625ff0 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2002, 2005 Object Factory Inc.
+++ * Copyright (c) 2002, 2011 Object Factory Inc.
++  * All rights reserved. This program and the accompanying materials 
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -7,12 +7,14 @@
++  * 
++  * Contributors:
++  *		Object Factory Inc. - Initial implementation
+++ *		IBM Corporation - bug fixes
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.dtd.schema;
++ import java.util.Iterator;
++ import java.util.LinkedList;
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.dtd.IAtom;
++ import org.eclipse.ant.internal.ui.dtd.IModel;
++ 
++@@ -207,7 +209,7 @@ public class Model implements IModel {
++ 	 * @see org.eclipse.ant.internal.ui.dtd.IModel#getQualifier()
++ 	 */
++ 	public String getQualifier() {
++-		return fMin == 1 ? (fMax == UNBOUNDED ? "+" : "") : (fMax == UNBOUNDED ? "*" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+++		return fMin == 1 ? (fMax == UNBOUNDED ? "+" : IAntCoreConstants.EMPTY_STRING) : (fMax == UNBOUNDED ? "*" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
++ 	}
++ 	
++ 	/**
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java
++index a91e5f2..70762dd 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2003, 2005 IBM Corporation and others.
+++ * Copyright (c) 2003, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -11,6 +11,7 @@
++ 
++ package org.eclipse.ant.internal.ui.editor;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.jface.text.BadLocationException;
++ import org.eclipse.jface.text.DocumentEvent;
++ import org.eclipse.jface.text.IDocument;
++@@ -92,7 +93,7 @@ public class AntCompletionProposal implements ICompletionProposal, ICompletionPr
++ 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension2#validate(org.eclipse.jface.text.IDocument, int, org.eclipse.jface.text.DocumentEvent)
++ 	 */
++ 	public boolean validate(IDocument document, int offset, DocumentEvent event) {
++-		String enteredText= ""; //$NON-NLS-1$
+++		String enteredText= IAntCoreConstants.EMPTY_STRING;
++ 		try {
++ 			enteredText = document.get(fReplacementOffset, offset-fReplacementOffset);
++ 		} catch (BadLocationException e) {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
++index 7a56061..90f3fe3 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+++ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
++  * und Informatik-Technologien mbH,
++  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
++  * All rights reserved. This program and the accompanying materials
++@@ -23,6 +23,7 @@ import java.util.List;
++ import java.util.Map;
++ import java.util.ResourceBundle;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.ExternalHyperlink;
++@@ -924,7 +925,7 @@ public class AntEditor extends TextEditor implements IReconcilingParticipant, IP
++             return null;
++         }
++         
++-		return ""; //$NON-NLS-1$
+++		return IAntCoreConstants.EMPTY_STRING;
++ 	}
++ 	
++ 	/* (non-Javadoc)
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
++index d31247b..4ffe3ac 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+++ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
++  * und Informatik-Technologien mbH, 
++  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
++  * All rights reserved. This program and the accompanying materials 
++@@ -43,6 +43,7 @@ import org.apache.tools.ant.taskdefs.MacroDef;
++ import org.apache.tools.ant.taskdefs.MacroInstance;
++ import org.apache.tools.ant.types.EnumeratedAttribute;
++ import org.apache.tools.ant.types.Reference;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -300,12 +301,13 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++ 		ITextSelection selection= (ITextSelection) viewer.getSelectionProvider().getSelection();
++ 
++ 		// adjust offset to end of normalized selection
++-		if (selection.getOffset() == offset) {
++-			offset= selection.getOffset() + selection.getLength();
+++		int newoffset = offset;
+++		if (selection.getOffset() == newoffset) {
+++			newoffset= selection.getOffset() + selection.getLength();
++ 		}
++ 
++-		String prefix= extractPrefix(viewer, offset);
++-		Region region= new Region(offset - prefix.length(), prefix.length());
+++		String prefix= extractPrefix(viewer, newoffset);
+++		Region region= new Region(newoffset - prefix.length(), prefix.length());
++ 		TemplateContext context= createContext(viewer, region);
++ 		if (context == null) {
++ 			return new ICompletionProposal[0];
++@@ -488,14 +490,14 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++         }
++         
++         if (proposals.length > 0) {
++-        	errorMessage= ""; //$NON-NLS-1$
+++        	errorMessage= IAntCoreConstants.EMPTY_STRING;
++         }
++         return proposals;
++ 
++     }
++     
++     private ICompletionProposal[] getProjectAttributeValueProposals(String prefix, String attributeName) {
++-		if (attributeName.equalsIgnoreCase("default")) { //$NON-NLS-1$
+++		if (attributeName.equalsIgnoreCase(IAntCoreConstants.DEFAULT)) {
++ 			return getDefaultValueProposals(prefix);
++ 		}
++ 
++@@ -848,7 +850,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++ 			}
++ 			String description = getDescriptionProvider().getDescriptionForTaskAttribute(taskName, attrName);
++ 			if(description != null) {
++-			    proposalInfo = (proposalInfo == null ? "" : proposalInfo); //$NON-NLS-1$
+++			    proposalInfo = (proposalInfo == null ? IAntCoreConstants.EMPTY_STRING : proposalInfo);
++ 			    proposalInfo += description;
++ 			}
++ 		}
++@@ -1342,7 +1344,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++         if (startOfWordToken != anOffset) {
++             currentPrefix= aDocumentText.substring(startOfWordToken, anOffset).toLowerCase();
++         } else {
++-            currentPrefix= ""; //$NON-NLS-1$
+++            currentPrefix= IAntCoreConstants.EMPTY_STRING;
++         }
++         return currentPrefix;
++     }
++@@ -1406,14 +1408,19 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++             int spaceIndex = stringToPrefix.lastIndexOf(' ');
++             int lessThanIndex = stringToPrefix.lastIndexOf('<');
++             int greaterThanIndex = stringToPrefix.lastIndexOf('>');
++-            
++             // Task proposal
++-            if(lessThanIndex > spaceIndex && greaterThanIndex < lessThanIndex) {
++-                int slashIndex = stringToPrefix.lastIndexOf('/');
++-                if(slashIndex == lessThanIndex +1) {
++-                    return PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; // ... </
++-                }
++-                return PROPOSAL_MODE_TASK_PROPOSAL;
+++            if(greaterThanIndex < lessThanIndex) {
+++            	//we are inside an open element
+++            	if(lastChar == '$') {
+++            		return PROPOSAL_MODE_PROPERTY_PROPOSAL;
+++            	}
+++            	if(lessThanIndex > spaceIndex) {
+++	                int slashIndex = stringToPrefix.lastIndexOf('/');
+++	                if(slashIndex == lessThanIndex +1) {
+++	                    return PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; // ... </
+++	                }
+++	                return PROPOSAL_MODE_TASK_PROPOSAL;
+++            	}
++             }
++             if(lessThanIndex < greaterThanIndex) {
++             	if (isPropertyProposalMode(stringToPrefix)) {
++@@ -1587,7 +1594,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
++     		node= antModel.getOpenElement();
++     	}
++     	if (node == null) {
++-    		return ""; //$NON-NLS-1$
+++    		return IAntCoreConstants.EMPTY_STRING;
++     	} else if (node instanceof AntTaskNode) {
++     		String name= node.getName();
++     		if (offset <= node.getOffset() + name.length() - 1) {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
++index d4eaf62..2e0273f 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java	
++@@ -20,6 +20,7 @@ import java.util.ArrayList;
++ import java.util.List;
++ import java.util.Map;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntSourceViewerConfiguration;
++ import org.eclipse.ant.internal.ui.editor.formatter.XmlDocumentFormattingStrategy;
++ import org.eclipse.ant.internal.ui.editor.formatter.XmlElementFormattingStrategy;
++@@ -262,7 +263,7 @@ public class AntEditorSourceViewerConfiguration extends AntSourceViewerConfigura
++ 			list.add(prefix.toString());
++ 		}
++ 
++-		list.add(""); //$NON-NLS-1$
+++		list.add(IAntCoreConstants.EMPTY_STRING);
++ 		
++ 		return (String[]) list.toArray(new String[list.size()]);
++ 	}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
++index b8f1882..f546401 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java	
++@@ -24,6 +24,7 @@ import javax.xml.parsers.DocumentBuilder;
++ import javax.xml.parsers.DocumentBuilderFactory;
++ import javax.xml.parsers.ParserConfigurationException;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.runtime.IProgressMonitor;
++ import org.eclipse.jface.operation.IRunnableWithProgress;
++@@ -62,8 +63,6 @@ public class TaskDescriptionProvider {
++     public static final String XML_TAG_ATTRIBUTES = "attributes"; //$NON-NLS-1$
++     public static final String XML_TAG_ELEMENT = "element"; //$NON-NLS-1$
++     public static final String XML_TAG_STRUCTURE = "structure"; //$NON-NLS-1$
++-    public static final String XML_TAG_DESCRIPTION = "description"; //$NON-NLS-1$
++-    public static final String XML_ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
++     public static final String XML_ATTRIBUTE_REQUIRED = "required"; //$NON-NLS-1$
++     
++     private static TaskDescriptionProvider fgDefault;
++@@ -110,7 +109,7 @@ public class TaskDescriptionProvider {
++                 String tempTagName = tempNode.getNodeName();
++                 if(tempTagName.equals(XML_TAG_TASK)) {
++                     NamedNodeMap tempAttributes = tempNode.getAttributes();
++-                    Node tempAttributeNode = tempAttributes.getNamedItem(XML_ATTRIBUTE_NAME);
+++                    Node tempAttributeNode = tempAttributes.getNamedItem(IAntCoreConstants.NAME);
++                     if(tempAttributeNode != null) {
++                         String tempTaskName = tempAttributeNode.getNodeValue();
++                         if(tempTaskName != null) {
++@@ -181,7 +180,7 @@ public class TaskDescriptionProvider {
++         NodeList tempChildNodes = aNode.getChildNodes();
++         for (int i=0; i<tempChildNodes.getLength(); i++) {
++             Node tempNode = tempChildNodes.item(i);
++-            if(tempNode instanceof Element && XML_TAG_DESCRIPTION.equals(tempNode.getNodeName())) {
+++            if(tempNode instanceof Element && IAntCoreConstants.DESCRIPTION.equals(tempNode.getNodeName())) {
++                 Element tempDescriptionElement = (Element)tempNode;
++                 Node tempChildNode = tempDescriptionElement.getFirstChild();
++                 if(tempChildNode instanceof Text) {
++@@ -373,7 +372,7 @@ public class TaskDescriptionProvider {
++      */
++     public String getTaskAttributeName(Node aTaskAttributeNode) {
++     	NamedNodeMap tmpNamedNodeMap = aTaskAttributeNode.getAttributes();	
++-    	return tmpNamedNodeMap.getNamedItem(XML_ATTRIBUTE_NAME).getNodeValue();
+++    	return tmpNamedNodeMap.getNamedItem(IAntCoreConstants.NAME).getNodeValue();
++     }
++     
++     /**
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java
++index a7b5f4a..7a2fbd9 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others.
+++ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
++  * All rights reserved. This program and the accompanying materials 
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -11,6 +11,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.editor.formatter;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
++ import org.eclipse.jface.preference.IPreferenceStore;
++@@ -25,7 +26,7 @@ public class FormattingPreferences {
++        if (!useSpacesInsteadOfTabs()) {
++             canonicalIndent = "\t"; //$NON-NLS-1$
++         } else {
++-            String tab = ""; //$NON-NLS-1$
+++            String tab = IAntCoreConstants.EMPTY_STRING;
++             for (int i = 0; i < getTabWidth(); i++) {
++                 tab = tab.concat(" "); //$NON-NLS-1$
++             }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
++index a9dbfb7..4d9abf6 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2006s John-Mason P. Shackelford and others.
+++ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
++  * All rights reserved. This program and the accompanying materials 
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -16,6 +16,7 @@ import java.io.IOException;
++ import java.io.Reader;
++ import java.io.StringReader;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
++ import org.eclipse.core.runtime.Assert;
++@@ -206,7 +207,7 @@ public class XmlDocumentFormatter {
++          * @see org.eclipse.ant.internal.ui.editor.formatter.XmlDocumentFormatter.TagReader#getStartOfTag()
++          */
++         public String getStartOfTag() {
++-            return ""; //$NON-NLS-1$
+++            return IAntCoreConstants.EMPTY_STRING;
++         }
++ 
++         /* (non-Javadoc)
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java
++index 9891a45..9273679 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2006 John-Mason P. Shackelford and others.
+++ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
++  * All rights reserved. This program and the accompanying materials 
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -7,6 +7,7 @@
++  * 
++  * Contributors:
++  *     John-Mason P. Shackelford - initial API and implementation
+++ *     IBM Corporation - bug fixes
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.editor.formatter;
++ 
++@@ -14,6 +15,7 @@ import java.util.ArrayList;
++ import java.util.Arrays;
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.editor.templates.AntContext;
++ import org.eclipse.ant.internal.ui.editor.text.AntDocumentSetupParticipant;
++ import org.eclipse.ant.internal.ui.editor.text.AntEditorPartitionScanner;
++@@ -222,11 +224,11 @@ public class XmlFormatter {
++ 	private static String getLeadingText(IDocument document, IAntModel model, int completionOffset) {
++ 		AntProjectNode project= model.getProjectNode(false);
++ 		if (project == null) {
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		AntElementNode node= project.getNode(completionOffset);// - fAccumulatedChange);
++ 		if (node == null) {
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		
++ 		StringBuffer buf= new StringBuffer();
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java
++index 834afb7..392a891 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2005 IBM Corporation and others.
+++ * Copyright (c) 2004, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -18,6 +18,7 @@ import java.util.List;
++ import java.util.Map;
++ 
++ import org.eclipse.ant.core.AntCorePlugin;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.model.IAntModel;
++ import org.eclipse.ant.internal.ui.model.IProblem;
++@@ -51,7 +52,7 @@ public class AntEditorMarkerUpdater {
++ 		 */
++ 		public IStatus runInWorkspace(IProgressMonitor monitor) {
++ 			updateMarkers0(fProblems);
++-			return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), IStatus.OK, "", null); //$NON-NLS-1$
+++			return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), IStatus.OK, IAntCoreConstants.EMPTY_STRING, null);
++ 		}
++ 	}
++ 	
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java
++index 41b3227..ada3f5f 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005  John-Mason P. Shackelford and others.
+++ * Copyright (c) 2000, 2011  John-Mason P. Shackelford and others.
++  * All rights reserved. This program and the accompanying materials 
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -11,6 +11,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.editor.templates;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences;
++ import org.eclipse.ant.internal.ui.editor.formatter.XmlFormatter;
++@@ -95,7 +96,7 @@ public class AntTemplatePreferencePage extends TemplatePreferencePage {
++ 				viewer.getDocument().set(template.getPattern());
++ 			}
++ 		} else {
++-			viewer.getDocument().set(""); //$NON-NLS-1$
+++			viewer.getDocument().set(IAntCoreConstants.EMPTY_STRING);
++ 		}		
++ 	}
++ 	/* (non-Javadoc)
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
++index 90f616b..a8f6c6c 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -18,6 +18,7 @@ import org.apache.tools.ant.Project;
++ import org.apache.tools.ant.types.AbstractFileSet;
++ import org.apache.tools.ant.types.Path;
++ import org.apache.tools.ant.types.PatternSet;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.debug.model.AntProperty;
++ import org.eclipse.ant.internal.launching.debug.model.AntStackFrame;
++ import org.eclipse.ant.internal.launching.debug.model.AntValue;
++@@ -201,8 +202,8 @@ public class XMLTextHover implements ITextHover, ITextHoverExtension, IInformati
++ 				HTMLPrinter.addBullet(buffer, includes[i]);
++ 			}
++ 		}
++-		HTMLPrinter.addParagraph(buffer, ""); //$NON-NLS-1$
++-		HTMLPrinter.addParagraph(buffer, ""); //$NON-NLS-1$
+++		HTMLPrinter.addParagraph(buffer, IAntCoreConstants.EMPTY_STRING);
+++		HTMLPrinter.addParagraph(buffer, IAntCoreConstants.EMPTY_STRING);
++ 		if (excludes != null && excludes.length > 0) {
++ 			HTMLPrinter.addSmallHeader(buffer, AntEditorTextMessages.XMLTextHover_6);
++ 			for (int i = 0; i < excludes.length; i++) {
++@@ -302,24 +303,25 @@ public class XMLTextHover implements ITextHover, ITextHoverExtension, IInformati
++ 
++ 	private static IRegion cleanRegionForNonProperty(int offset, IDocument document, IRegion region) throws BadLocationException {
++ 		//do not allow spaces in region that is not a property
++-		String text= document.get(region.getOffset(), region.getLength());
+++		IRegion r = region;
+++		String text= document.get(r.getOffset(), r.getLength());
++ 		if (text.startsWith("/")) { //$NON-NLS-1$
++ 			text= text.substring(1);
++-			region= new Region(region.getOffset() + 1, region.getLength() - 1);
+++			r= new Region(r.getOffset() + 1, r.getLength() - 1);
++ 		}
++ 		StringTokenizer tokenizer= new StringTokenizer(text, " "); //$NON-NLS-1$
++ 		if (tokenizer.countTokens() != 1) {
++ 		    while(tokenizer.hasMoreTokens()) {
++ 		        String token= tokenizer.nextToken();
++ 		        int index= text.indexOf(token);
++-		        if (region.getOffset() + index <= offset && region.getOffset() + index + token.length() >= offset) {
++-		            region= new Region(region.getOffset() + index, token.length());
+++		        if (r.getOffset() + index <= offset && r.getOffset() + index + token.length() >= offset) {
+++		            r= new Region(r.getOffset() + index, token.length());
++ 		            break;
++ 		        }
++ 		    }
++ 		}
++ 		
++-		return region;
+++		return r;
++ 	}
++ 	
++ 	/* (non-Javadoc)
++diff --git a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
++index 1dc834e..1018626 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java	
++@@ -37,6 +37,7 @@ import org.apache.tools.ant.helper.AntXMLContext;
++ import org.apache.tools.ant.helper.ProjectHelper2;
++ import org.apache.tools.ant.util.FileUtils;
++ import org.apache.tools.ant.util.JAXPUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.model.IAntModel;
++ import org.eclipse.jface.text.BadLocationException;
++ import org.xml.sax.Attributes;
++@@ -158,7 +159,7 @@ public class ProjectHelper extends ProjectHelper2 {
++             String fileName= contextLocator.getSystemId();
++             String normalizedFileName= (String) fNormalizedFileNames.get(fileName);
++             if (normalizedFileName == null) {
++-                if (fileName.startsWith("file:")) { //$NON-NLS-1$
+++                if (fileName.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
++                     normalizedFileName= getFileUtils().fromURI(fileName);
++                     fNormalizedFileNames.put(fileName, normalizedFileName);
++                 } else {
++@@ -298,7 +299,7 @@ public class ProjectHelper extends ProjectHelper2 {
++ 			}
++             if (context.getCurrentTarget() == null) {
++                 //exception occurred creating the project
++-                context.getProject().addTarget("", context.getImplicitTarget()); //$NON-NLS-1$
+++                context.getProject().addTarget(IAntCoreConstants.EMPTY_STRING, context.getImplicitTarget());
++                 context.setCurrentTarget(context.getImplicitTarget());
++             }
++ 			if (currentImportStackSize == 1) {
++@@ -636,7 +637,7 @@ public class ProjectHelper extends ProjectHelper2 {
++             try {
++                 Target newCurrent = new Target();
++                 newCurrent.setProject(project);
++-                newCurrent.setName(""); //$NON-NLS-1$
+++                newCurrent.setName(IAntCoreConstants.EMPTY_STRING);
++                 context.setCurrentTarget(newCurrent);
++                 context.setCurrentTargets(new HashMap());
++                 context.setImplicitTarget(newCurrent);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java b/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java
++index 655ec18..8c2f191 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2007 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.antsupport.inputhandler;
++ import org.apache.tools.ant.BuildException;
++ import org.apache.tools.ant.input.DefaultInputHandler;
++ import org.apache.tools.ant.input.InputRequest;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.antsupport.AntSupportMessages;
++ import org.eclipse.jface.dialogs.IInputValidator;
++ import org.eclipse.jface.dialogs.InputDialog;
++@@ -59,7 +60,7 @@ public class AntInputHandler extends DefaultInputHandler {
++ 						} 
++ 						if (fFirstValidation) {
++ 						    fFirstValidation= false;
++-						    return ""; //$NON-NLS-1$
+++						    return IAntCoreConstants.EMPTY_STRING;
++ 						}
++ 						return AntSupportMessages.AntInputHandler_Invalid_input_2;
++ 					}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java
++index 778b9d5..5128cde 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2008 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui;
++ 
++ import java.util.Locale;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.editor.DecayCodeCompletionDataStructuresThread;
++ import org.eclipse.ant.internal.ui.editor.text.AntEditorDocumentProvider;
++ import org.eclipse.core.runtime.IStatus;
++@@ -53,8 +54,6 @@ public class AntUIPlugin extends AbstractUIPlugin {
++ 	 */
++ 	public static final String PI_ANTUI = "org.eclipse.ant.ui"; //$NON-NLS-1$
++ 	
++-	private static final String EMPTY_STRING= ""; //$NON-NLS-1$
++-	
++ 	/**
++ 	 * The combined preference store.
++ 	 * @since 3.1
++@@ -139,7 +138,7 @@ public class AntUIPlugin extends AbstractUIPlugin {
++ 	 */
++ 	public static IStatus newErrorStatus(String message, Throwable exception) {
++ 		if (message == null) {
++-			message= EMPTY_STRING; 
+++			message= IAntCoreConstants.EMPTY_STRING; 
++ 		}		
++ 		return new Status(IStatus.ERROR, IAntUIConstants.PLUGIN_ID, 0, message, exception);
++ 	}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
++index 05b7cd5..72d106d 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -24,6 +24,7 @@ import java.util.regex.Pattern;
++ import org.apache.tools.ant.Target;
++ import org.eclipse.ant.core.AntCorePlugin;
++ import org.eclipse.ant.internal.core.AntCoreUtil;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.AntLaunchingUtil;
++ import org.eclipse.ant.internal.ui.editor.AntEditor;
++ import org.eclipse.ant.internal.ui.model.AntElementNode;
++@@ -247,7 +248,7 @@ public final class AntUtil {
++ 		AntTargetNode[] targets= getTargets(project);
++         if (targets == null) {
++             Hashtable antTargets= project.getProject().getTargets();
++-            Target implicitTarget= (Target) antTargets.get(""); //$NON-NLS-1$
+++            Target implicitTarget= (Target) antTargets.get(IAntCoreConstants.EMPTY_STRING);
++             if (implicitTarget != null) {
++                 AntTargetNode implicitTargetNode= new AntTargetNode(implicitTarget);
++                 project.addChildNode(implicitTargetNode);
++@@ -397,7 +398,7 @@ public final class AntUtil {
++ 		if (path.length() == 0) {
++ 			return null;
++ 		}
++-		if (path.startsWith("file:")) { //$NON-NLS-1$
+++		if (path.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
++ 			// remove "file:"
++ 			path= path.substring(5, path.length());
++ 		}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java
++index df0ea2b..9ced695 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2009 IBM Corporation and others.
+++ * Copyright (c) 2009, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.preferences.AntObjectLabelProvider;
++ import org.eclipse.jface.viewers.ColumnViewer;
++ import org.eclipse.jface.viewers.Viewer;
++@@ -92,11 +93,11 @@ public abstract class ColumnSorter extends ViewerComparator {
++ 	public int compare(Viewer viewer, Object e1, Object e2) {
++ 		String text1 = getCompareText(e1, this.columnidx);
++ 		if(text1 == null) {
++-			text1 = ""; //$NON-NLS-1$
+++			text1 = IAntCoreConstants.EMPTY_STRING; 
++ 		}
++ 		String text2 = getCompareText(e2, this.columnidx);
++ 		if(text2 == null) {
++-			text2 = ""; //$NON-NLS-1$
+++			text2 = IAntCoreConstants.EMPTY_STRING; 
++ 		}
++ 		return (this.direction == SWT.UP ? -1 : 1) * 
++ 			text1.compareTo(text2);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java
++index bec0e91..0b5dbed 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2008 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -21,6 +21,7 @@ import java.util.List;
++ import org.apache.tools.ant.Task;
++ import org.apache.tools.ant.UnknownElement;
++ import org.apache.tools.ant.taskdefs.Javac;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.model.AntElementNode;
++@@ -249,7 +250,7 @@ public class AntNewJavaProjectPage extends WizardPage {
++ 	 */
++ 	private String getProjectNameFieldValue() {
++ 		if (fProjectNameField == null) {
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		} 
++ 		return fProjectNameField.getText().trim();
++ 	}
++@@ -268,7 +269,7 @@ public class AntNewJavaProjectPage extends WizardPage {
++ 	 */
++ 	private void handleBrowseButtonPressed() {
++ 		
++-		String lastUsedPath= ""; //$NON-NLS-1$
+++		String lastUsedPath= IAntCoreConstants.EMPTY_STRING;
++ 		FileDialog dialog = new FileDialog(getShell(), SWT.SINGLE);
++ 		dialog.setFilterExtensions(new String[] { "*.xml" }); //$NON-NLS-1$;
++ 		dialog.setFilterPath(lastUsedPath);
++@@ -295,13 +296,13 @@ public class AntNewJavaProjectPage extends WizardPage {
++ 
++ 		String locationFieldContents = getProjectLocationFieldValue();
++ 
++-		if (locationFieldContents.equals("")) { //$NON-NLS-1$
+++		if (locationFieldContents.equals(IAntCoreConstants.EMPTY_STRING)) {
++ 			setErrorMessage(null);
++ 			setMessage(DataTransferMessages.AntNewJavaProjectPage_15);
++ 			return false;
++ 		}
++ 
++-		IPath path = new Path(""); //$NON-NLS-1$
+++		IPath path = new Path(IAntCoreConstants.EMPTY_STRING);
++ 		if (!path.isValidPath(locationFieldContents)) {
++ 			setErrorMessage(DataTransferMessages.AntNewJavaProjectPage_16);
++ 			return false;
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java
++index 5846e39..b6c8457 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2006 Richard Hoefter and others.
+++ * Copyright (c) 2004, 2011 Richard Hoefter and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -16,6 +16,7 @@ import java.util.HashMap;
++ import java.util.Iterator;
++ import java.util.Map;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.runtime.IProgressMonitor;
++ import org.eclipse.debug.core.ILaunch;
++@@ -59,7 +60,7 @@ public class AppletUtil
++         b.append("        <applet code="); //$NON-NLS-1$
++         b.append(getQuotedString(name + ".class")); //$NON-NLS-1$
++         String appletName = configuration.getAttribute(
++-                IJavaLaunchConfigurationConstants.ATTR_APPLET_NAME, ""); //$NON-NLS-1$
+++                IJavaLaunchConfigurationConstants.ATTR_APPLET_NAME, IAntCoreConstants.EMPTY_STRING);
++         if (appletName.length() != 0)
++         {
++             b.append(" name=\"" + appletName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
++index 46542a2..91860b2 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2009 Richard Hoefter and others.
+++ * Copyright (c) 2004, 2011 Richard Hoefter and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -38,7 +38,9 @@ import javax.xml.transform.TransformerConfigurationException;
++ import javax.xml.transform.TransformerException;
++ import javax.xml.transform.TransformerFactoryConfigurationError;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
+++import org.eclipse.ant.internal.ui.model.IAntModelConstants;
++ import org.eclipse.core.resources.IFile;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.runtime.IPath;
++@@ -265,8 +267,8 @@ public class BuildFileCreator
++             String key = (String) iterator.next();
++             String value = (String) variable2valueMap.get(key);
++             Element prop = doc.createElement("property"); //$NON-NLS-1$
++-            prop.setAttribute("name", key); //$NON-NLS-1$
++-            prop.setAttribute("value", value); //$NON-NLS-1$
+++            prop.setAttribute(IAntCoreConstants.NAME, key);
+++            prop.setAttribute(IAntCoreConstants.VALUE, value);
++             if (first)
++             {
++                 first = false;               
++@@ -291,8 +293,8 @@ public class BuildFileCreator
++     {   
++         // <project name="hello" default="build" basedir=".">
++         root = doc.createElement("project"); //$NON-NLS-1$
++-        root.setAttribute("name" , projectName); //$NON-NLS-1$
++-        root.setAttribute("default" , "build"); //$NON-NLS-1$ //$NON-NLS-2$
+++        root.setAttribute(IAntCoreConstants.NAME , projectName);
+++        root.setAttribute(IAntCoreConstants.DEFAULT , "build"); //$NON-NLS-1$
++         root.setAttribute("basedir" , "."); //$NON-NLS-1$ //$NON-NLS-2$
++         doc.appendChild(root);
++         
++@@ -335,7 +337,7 @@ public class BuildFileCreator
++                     if (node instanceof ProcessingInstruction &&  
++                             IMPORT_BUILDFILE_PROCESSING_TARGET.equals(((ProcessingInstruction) node).getTarget().trim())) {
++                         Element element = doc.createElement("import"); //$NON-NLS-1$
++-                        element.setAttribute("file", file.getName()); //$NON-NLS-1$
+++                        element.setAttribute(IAntCoreConstants.FILE, file.getName());
++                         root.appendChild(element);
++                         break;
++                     }
++@@ -424,7 +426,7 @@ public class BuildFileCreator
++             else
++             {
++                 // prefix with ${project.location}
++-                String prefix = ""; //$NON-NLS-1$
+++                String prefix = IAntCoreConstants.EMPTY_STRING;
++                 if (!entry.startsWith("${") &&                                  // no variable ${var}/classes //$NON-NLS-1$
++                     !projectName.equals(currentProject.getProject().getName())) // not main project 
++                 {
++@@ -436,7 +438,7 @@ public class BuildFileCreator
++                 }
++                 Element pathElement = doc.createElement("pathelement"); //$NON-NLS-1$
++                 String path = ExportUtil.getRelativePath(prefix + entry, projectRoot);
++-                pathElement.setAttribute("location", path); //$NON-NLS-1$
+++                pathElement.setAttribute(IAntModelConstants.ATTR_LOCATION, path);
++                 element.appendChild(pathElement);
++             }
++         }
++@@ -483,7 +485,7 @@ public class BuildFileCreator
++                 }
++                 jarFile = ExportUtil.getRelativePath(jarFile, projectRoot);
++                 Element userPathElement = doc.createElement("pathelement"); //$NON-NLS-1$
++-                userPathElement.setAttribute("location", jarFile); //$NON-NLS-1$
+++                userPathElement.setAttribute(IAntModelConstants.ATTR_LOCATION, jarFile);
++                 userElement.appendChild(userPathElement);
++             }
++             addToClasspathBlock(userElement);
++@@ -499,11 +501,11 @@ public class BuildFileCreator
++         // <fileset dir="${java.home}/lib" includes="*.jar"/>
++         // <fileset dir="${java.home}/lib/ext" includes="*.jar"/>
++         Element pathElement = doc.createElement("fileset"); //$NON-NLS-1$
++-        pathElement.setAttribute("dir", "${java.home}/lib"); //$NON-NLS-1$ //$NON-NLS-2$
+++        pathElement.setAttribute(IAntCoreConstants.DIR, "${java.home}/lib"); //$NON-NLS-1$
++         pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
++         element.appendChild(pathElement);
++         pathElement = doc.createElement("fileset"); //$NON-NLS-1$
++-        pathElement.setAttribute("dir", "${java.home}/lib/ext"); //$NON-NLS-1$ //$NON-NLS-2$
+++        pathElement.setAttribute(IAntCoreConstants.DIR, "${java.home}/lib/ext"); //$NON-NLS-1$
++         pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
++         element.appendChild(pathElement);
++     }
++@@ -552,7 +554,7 @@ public class BuildFileCreator
++         //     <mkdir dir="classes"/>
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "init"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "init"); //$NON-NLS-1$
++         List classDirsUnique = ExportUtil.removeDuplicates(classDirs);        
++         for (Iterator iterator = classDirsUnique.iterator(); iterator.hasNext();)
++         {            
++@@ -561,7 +563,7 @@ public class BuildFileCreator
++                 !EclipseClasspath.isReference(classDir))
++             {
++                 Element pathElement = doc.createElement("mkdir"); //$NON-NLS-1$
++-                pathElement.setAttribute("dir", classDir); //$NON-NLS-1$
+++                pathElement.setAttribute(IAntCoreConstants.DIR, classDir);
++                 element.appendChild(pathElement);
++             }
++         }
++@@ -605,7 +607,7 @@ public class BuildFileCreator
++                 copyElement.setAttribute("todir", classDir); //$NON-NLS-1$
++                 copyElement.setAttribute("includeemptydirs", "false"); //$NON-NLS-1$ //$NON-NLS-2$
++                 Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
++-                filesetElement.setAttribute("dir", srcDir); //$NON-NLS-1$
+++                filesetElement.setAttribute(IAntCoreConstants.DIR, srcDir);
++ 
++                 List inclusions = (List) inclusionLists.get(i);
++                 List exclusions = (List) exclusionLists.get(i);
++@@ -614,21 +616,21 @@ public class BuildFileCreator
++                 {
++                     String inclusion = (String) iter.next();
++                     Element includeElement = doc.createElement("include"); //$NON-NLS-1$
++-                    includeElement.setAttribute("name", inclusion); //$NON-NLS-1$
+++                    includeElement.setAttribute(IAntCoreConstants.NAME, inclusion);
++                     filesetElement.appendChild(includeElement);
++                 }           
++                 for (Iterator iter = filters.iterator(); iter.hasNext();)
++                 {
++                     String exclusion = (String) iter.next();
++                     Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
++-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
+++                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
++                     filesetElement.appendChild(excludeElement);
++                 }
++                 for (Iterator iter = exclusions.iterator(); iter.hasNext();)
++                 {
++                     String exclusion = (String) iter.next();
++                     Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
++-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
+++                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
++                     filesetElement.appendChild(excludeElement);
++                 }
++                 
++@@ -648,7 +650,7 @@ public class BuildFileCreator
++         //     <delete dir="classes"/>
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "clean"); //$NON-NLS-1$
++         List classDirUnique = ExportUtil.removeDuplicates(classDirs);
++         for (Iterator iterator = classDirUnique.iterator(); iterator.hasNext();)
++         {
++@@ -657,7 +659,7 @@ public class BuildFileCreator
++                 !EclipseClasspath.isReference(classDir))
++             {
++                 Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
++-                deleteElement.setAttribute("dir", classDir); //$NON-NLS-1$
+++                deleteElement.setAttribute(IAntCoreConstants.DIR, classDir);
++                 element.appendChild(deleteElement);
++             }
++         }
++@@ -672,7 +674,7 @@ public class BuildFileCreator
++         {
++             Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
++             Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
++-            filesetElement.setAttribute("dir", "."); //$NON-NLS-1$ //$NON-NLS-2$
+++            filesetElement.setAttribute(IAntCoreConstants.DIR, "."); //$NON-NLS-1$
++             filesetElement.setAttribute("includes", "**/*.class"); //$NON-NLS-1$ //$NON-NLS-2$
++             deleteElement.appendChild(filesetElement);           
++             element.appendChild(deleteElement);           
++@@ -688,7 +690,7 @@ public class BuildFileCreator
++         //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="clean"/>
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "cleanall"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "cleanall"); //$NON-NLS-1$
++         element.setAttribute("depends", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
++         List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
++         for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
++@@ -696,7 +698,7 @@ public class BuildFileCreator
++             IJavaProject subProject = (IJavaProject) iterator.next();
++             Element antElement = doc.createElement("ant"); //$NON-NLS-1$
++             antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
++-            antElement.setAttribute("dir", "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++            antElement.setAttribute(IAntCoreConstants.DIR, "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("target", "clean");  //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
++             element.appendChild(antElement);
++@@ -715,7 +717,7 @@ public class BuildFileCreator
++     {
++         // <target name="build" depends="build-subprojects,build-project"/>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "build"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "build"); //$NON-NLS-1$
++         element.setAttribute("depends", "build-subprojects,build-project"); //$NON-NLS-1$ //$NON-NLS-2$
++         root.appendChild(element);
++         
++@@ -723,20 +725,20 @@ public class BuildFileCreator
++         //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="build-project"/>
++         // </target>
++         element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "build-subprojects"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "build-subprojects"); //$NON-NLS-1$
++         List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
++         for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
++         {
++             IJavaProject subProject = (IJavaProject) iterator.next();
++             Element antElement = doc.createElement("ant"); //$NON-NLS-1$
++             antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
++-            antElement.setAttribute("dir", "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++            antElement.setAttribute(IAntCoreConstants.DIR, "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("target", "build-project");  //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
++             if (CREATE_ECLIPSE_COMPILE_TARGET) {
++                 Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
++                 Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
++-                propertyrefElement.setAttribute("name", "build.compiler");  //$NON-NLS-1$ //$NON-NLS-2$
+++                propertyrefElement.setAttribute(IAntCoreConstants.NAME, "build.compiler");  //$NON-NLS-1$
++                 propertysetElement.appendChild(propertyrefElement);
++                 antElement.appendChild(propertysetElement);
++             }
++@@ -754,7 +756,7 @@ public class BuildFileCreator
++         //     </javac>    
++         // </target>        
++         element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "build-project"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "build-project"); //$NON-NLS-1$
++         element.setAttribute("depends", "init"); //$NON-NLS-1$ //$NON-NLS-2$
++         Element echoElement = doc.createElement("echo"); //$NON-NLS-1$
++         echoElement.setAttribute("message", "${ant.project.name}: ${ant.file}"); //$NON-NLS-1$ //$NON-NLS-2$
++@@ -782,14 +784,14 @@ public class BuildFileCreator
++                 {
++                     String inclusion = (String) iter.next();
++                     Element includeElement = doc.createElement("include"); //$NON-NLS-1$
++-                    includeElement.setAttribute("name", inclusion); //$NON-NLS-1$
+++                    includeElement.setAttribute(IAntCoreConstants.NAME, inclusion);
++                     javacElement.appendChild(includeElement);
++                 }           
++                 for (Iterator iter = exclusions.iterator(); iter.hasNext();)
++                 {
++                     String exclusion = (String) iter.next();
++                     Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
++-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
+++                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
++                     javacElement.appendChild(excludeElement);
++                 }           
++                 Element classpathRefElement = doc.createElement("classpath"); //$NON-NLS-1$
++@@ -826,8 +828,8 @@ public class BuildFileCreator
++         //     <ant antfile="build.xml" dir="${hello.location}" target="build" inheritAll="false"/> 
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "build-refprojects"); //$NON-NLS-1$ //$NON-NLS-2$
++-        element.setAttribute("description", "Build all projects which " + //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "build-refprojects"); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.DESCRIPTION, "Build all projects which " + //$NON-NLS-1$ 
++                 "reference this project. Useful to propagate changes."); //$NON-NLS-1$
++         for (Iterator iter = refProjects.iterator(); iter.hasNext();) {
++             IJavaProject p = (IJavaProject) iter.next();
++@@ -839,20 +841,20 @@ public class BuildFileCreator
++ 
++             Element antElement = doc.createElement("ant"); //$NON-NLS-1$
++             antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
++-            antElement.setAttribute("dir", "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++            antElement.setAttribute(IAntCoreConstants.DIR, "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("target", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("inheritAll", "false"); //$NON-NLS-1$ //$NON-NLS-2$
++             element.appendChild(antElement);
++             
++             antElement = doc.createElement("ant"); //$NON-NLS-1$
++             antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
++-            antElement.setAttribute("dir", "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++            antElement.setAttribute(IAntCoreConstants.DIR, "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
++             antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
++             if (CREATE_ECLIPSE_COMPILE_TARGET) {
++                 Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
++                 Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
++-                propertyrefElement.setAttribute("name", "build.compiler");  //$NON-NLS-1$ //$NON-NLS-2$
+++                propertyrefElement.setAttribute(IAntCoreConstants.NAME, "build.compiler");  //$NON-NLS-1$
++                 propertysetElement.appendChild(propertyrefElement);
++                 antElement.appendChild(propertysetElement);
++             }
++@@ -884,12 +886,12 @@ public class BuildFileCreator
++         //     </unzip>
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "init-eclipse-compiler"); //$NON-NLS-1$ //$NON-NLS-2$
++-        element.setAttribute("description", "copy Eclipse compiler jars to ant lib directory"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "init-eclipse-compiler"); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.DESCRIPTION, "copy Eclipse compiler jars to ant lib directory"); //$NON-NLS-1$ 
++         Element copyElement = doc.createElement("copy"); //$NON-NLS-1$
++         copyElement.setAttribute("todir", "${ant.library.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
++         Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
++-        filesetElement.setAttribute("dir", "${ECLIPSE_HOME}/plugins"); //$NON-NLS-1$ //$NON-NLS-2$
+++        filesetElement.setAttribute(IAntCoreConstants.DIR, "${ECLIPSE_HOME}/plugins"); //$NON-NLS-1$
++         filesetElement.setAttribute("includes", "org.eclipse.jdt.core_*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
++         copyElement.appendChild(filesetElement);
++         element.appendChild(copyElement);
++@@ -913,11 +915,11 @@ public class BuildFileCreator
++         //     <antcall target="build" />
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "build-eclipse-compiler"); //$NON-NLS-1$ //$NON-NLS-2$
++-        element.setAttribute("description", "compile project with Eclipse compiler"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "build-eclipse-compiler"); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.DESCRIPTION, "compile project with Eclipse compiler"); //$NON-NLS-1$ 
++         Element propertyElement = doc.createElement("property"); //$NON-NLS-1$
++-        propertyElement.setAttribute("name", "build.compiler"); //$NON-NLS-1$ //$NON-NLS-2$
++-        propertyElement.setAttribute("value", "org.eclipse.jdt.core.JDTCompilerAdapter"); //$NON-NLS-1$ //$NON-NLS-2$
+++        propertyElement.setAttribute(IAntCoreConstants.NAME, "build.compiler"); //$NON-NLS-1$
+++        propertyElement.setAttribute(IAntCoreConstants.VALUE, "org.eclipse.jdt.core.JDTCompilerAdapter"); //$NON-NLS-1$
++         element.appendChild(propertyElement);
++         Element antcallElement = doc.createElement("antcall"); //$NON-NLS-1$
++         antcallElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
++@@ -977,7 +979,7 @@ public class BuildFileCreator
++         for (int i = 0; i < confs.length; i++)
++         {
++             ILaunchConfiguration conf = confs[i];
++-            if (!projectName.equals(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""))) //$NON-NLS-1$
+++            if (!projectName.equals(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, IAntCoreConstants.EMPTY_STRING)))
++             {
++                 continue;
++             }
++@@ -1012,25 +1014,25 @@ public class BuildFileCreator
++     public void addJavaApplication(Map variable2value, ILaunchConfiguration conf) throws CoreException
++     {
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
++         Element javaElement = doc.createElement("java"); //$NON-NLS-1$
++         javaElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
++-        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "")); //$NON-NLS-1$ //$NON-NLS-2$
+++        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, IAntCoreConstants.EMPTY_STRING)); //$NON-NLS-1$
++         javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
++-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
+++        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
++         ExportUtil.addVariable(variable2value, dir, projectRoot);                
++-        if (!dir.equals("")) //$NON-NLS-1$
+++        if (!dir.equals(IAntCoreConstants.EMPTY_STRING))
++         {
++-            javaElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
+++            javaElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
++         }
++         if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
++         {
++             javaElement.setAttribute("newenvironment", "true"); //$NON-NLS-1$ //$NON-NLS-2$
++         }
++         Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
++-        addElements(props, doc, javaElement, "env", "key", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
++-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, javaElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
++-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""), doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++        addElements(props, doc, javaElement, "env", "key", IAntCoreConstants.VALUE); //$NON-NLS-1$ //$NON-NLS-2$
+++        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
+++        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
++         element.appendChild(javaElement);
++         
++         addRuntimeClasspath(conf, javaElement);
++@@ -1049,8 +1051,8 @@ public class BuildFileCreator
++      */
++     public void addApplet(Map variable2value, ILaunchConfiguration conf) throws CoreException, TransformerFactoryConfigurationError, UnsupportedEncodingException
++     {
++-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
++-        if (dir.equals("")) //$NON-NLS-1$
+++        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
+++        if (dir.equals(IAntCoreConstants.EMPTY_STRING))
++         {
++             dir = projectRoot;
++         }
++@@ -1090,17 +1092,17 @@ public class BuildFileCreator
++         }
++         
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
++         Element javaElement = doc.createElement("java"); //$NON-NLS-1$
++         javaElement.setAttribute("fork", "yes");  //$NON-NLS-1$//$NON-NLS-2$
++         javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_APPLET_APPLETVIEWER_CLASS, "sun.applet.AppletViewer")); //$NON-NLS-1$ //$NON-NLS-2$
++         javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
++         if (value != null)
++         {
++-            javaElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
+++            javaElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
++         }
++-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, javaElement, "jvmarg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
++-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""), doc, javaElement, "arg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+++        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "jvmarg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$
+++        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "arg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$
++         addElement(conf.getName() + ".html", doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
++         element.appendChild(javaElement);
++         addRuntimeClasspath(conf, javaElement);
++@@ -1126,22 +1128,22 @@ public class BuildFileCreator
++         //         <classpath refid="project.classpath"/>
++         //     </junit>
++         // </target>
++-        String testClass = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, ""); //$NON-NLS-1$
+++        String testClass = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, IAntCoreConstants.EMPTY_STRING);
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
+++        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
++         
++         Element mkdirElement = doc.createElement("mkdir"); //$NON-NLS-1$
++-        mkdirElement.setAttribute("dir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+++        mkdirElement.setAttribute(IAntCoreConstants.DIR, "${junit.output.dir}"); //$NON-NLS-1$
++         element.appendChild(mkdirElement);
++         
++         Element junitElement = doc.createElement("junit"); //$NON-NLS-1$
++         junitElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
++         junitElement.setAttribute("printsummary", "withOutAndErr"); //$NON-NLS-1$ //$NON-NLS-2$
++-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
+++        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
++         ExportUtil.addVariable(variable2value, dir, projectRoot);                
++-        if (!dir.equals("")) //$NON-NLS-1$
+++        if (!dir.equals(IAntCoreConstants.EMPTY_STRING))
++         {
++-            junitElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
+++            junitElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
++         }
++         if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
++         {
++@@ -1150,32 +1152,32 @@ public class BuildFileCreator
++         Element formatterElement = doc.createElement("formatter"); //$NON-NLS-1$
++         formatterElement.setAttribute("type", "xml");  //$NON-NLS-1$//$NON-NLS-2$
++         junitElement.appendChild(formatterElement);
++-        if (!testClass.equals("")) //$NON-NLS-1$
+++        if (!testClass.equals(IAntCoreConstants.EMPTY_STRING))
++         {
++             // Case 1: Single JUnit class
++             Element testElement = doc.createElement("test"); //$NON-NLS-1$
++-            testElement.setAttribute("name", testClass); //$NON-NLS-1$
+++            testElement.setAttribute(IAntCoreConstants.NAME, testClass);
++             testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
++             junitElement.appendChild(testElement);                       
++         }
++         else
++         {
++             // Case 2: Run all tests in project, package or source folder
++-            String container = conf.getAttribute("org.eclipse.jdt.junit.CONTAINER" /*JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR*/, ""); //$NON-NLS-1$ //$NON-NLS-2$
+++            String container = conf.getAttribute("org.eclipse.jdt.junit.CONTAINER" /*JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR*/, IAntCoreConstants.EMPTY_STRING); //$NON-NLS-1$
++             IType[] types = ExportUtil.findTestsInContainer(container);
++             Set sortedTypes = new TreeSet(ExportUtil.getITypeComparator());
++             sortedTypes.addAll(Arrays.asList(types));
++             for (Iterator iter = sortedTypes.iterator(); iter.hasNext();) {
++                 IType type = (IType) iter.next();
++                 Element testElement = doc.createElement("test"); //$NON-NLS-1$
++-                testElement.setAttribute("name", type.getFullyQualifiedName()); //$NON-NLS-1$
+++                testElement.setAttribute(IAntCoreConstants.NAME, type.getFullyQualifiedName());
++                 testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
++                 junitElement.appendChild(testElement);                       
++             }
++         }
++         Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
++-        addElements(props, doc, junitElement, "env", "key", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
++-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, junitElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+++        addElements(props, doc, junitElement, "env", "key", IAntCoreConstants.VALUE); //$NON-NLS-1$ //$NON-NLS-2$
+++        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, junitElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
++         element.appendChild(junitElement);
++         addRuntimeClasspath(conf, junitElement);
++         addRuntimeBootClasspath(conf, junitElement);
++@@ -1198,14 +1200,14 @@ public class BuildFileCreator
++         //     </junitreport>
++         // </target>
++         Element element = doc.createElement("target"); //$NON-NLS-1$
++-        element.setAttribute("name", "junitreport"); //$NON-NLS-1$ //$NON-NLS-2$
+++        element.setAttribute(IAntCoreConstants.NAME, "junitreport"); //$NON-NLS-1$
++         Element junitreport = doc.createElement("junitreport"); //$NON-NLS-1$
++         junitreport.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
++         Element fileset = doc.createElement("fileset"); //$NON-NLS-1$
++-        fileset.setAttribute("dir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+++        fileset.setAttribute(IAntCoreConstants.DIR, "${junit.output.dir}"); //$NON-NLS-1$
++         junitreport.appendChild(fileset);
++         Element include = doc.createElement("include"); //$NON-NLS-1$
++-        include.setAttribute("name", "TEST-*.xml"); //$NON-NLS-1$ //$NON-NLS-2$
+++        include.setAttribute(IAntCoreConstants.NAME, "TEST-*.xml"); //$NON-NLS-1$
++         fileset.appendChild(include);
++         Element report = doc.createElement("report"); //$NON-NLS-1$
++         report.setAttribute("format", "frames"); //$NON-NLS-1$ //$NON-NLS-2$
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java
++index 8de43fc..fa05d2a 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2008 Richard Hoefter and others.
+++ * Copyright (c) 2004, 2011 Richard Hoefter and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -20,6 +20,7 @@ import java.util.LinkedHashMap;
++ import java.util.List;
++ import java.util.Map;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.resources.IFile;
++ import org.eclipse.core.resources.ResourcesPlugin;
++@@ -218,7 +219,7 @@ public class EclipseClasspath
++             }
++             else
++             {
++-                String relativePath = ExportUtil.getRelativePath(file.getLocation() + "", //$NON-NLS-1$
+++                String relativePath = ExportUtil.getRelativePath(file.getLocation() + IAntCoreConstants.EMPTY_STRING,
++                         projectRoot);
++                 variable2valueMap.put(srcDir + ".link", relativePath); //$NON-NLS-1$
++             }
++@@ -307,7 +308,7 @@ public class EclipseClasspath
++                 index = e.indexOf('\\');
++             }
++             String variable = e;
++-            String path = ""; //$NON-NLS-1$
+++            String path = IAntCoreConstants.EMPTY_STRING;
++             if (index != -1)
++             {
++                 variable = e.substring(0, index);
++@@ -324,7 +325,7 @@ public class EclipseClasspath
++             else if (variable2valueMap.get(variable) == null)
++             {
++                 // only add empty value, if variable is new 
++-                variable2valueMap.put(variable, ""); //$NON-NLS-1$
+++                variable2valueMap.put(variable, IAntCoreConstants.EMPTY_STRING);
++             }
++             rawClassPathEntriesAbsolute.add(value + path);
++             rawClassPathEntries.add("${" + variable + "}" + path); //$NON-NLS-1$ //$NON-NLS-2$
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
++index b7a07bd..b9f3026 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2009 Richard Hoefter and others.
+++ * Copyright (c) 2004, 2011 Richard Hoefter and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *     IBM Corporation - NLS'ing and incorporating into Eclipse. 
++  *                     - Bug 177833 Class created from combination of all utility classes of contribution 
++  *                     - Bug 267459 Java project with an external jar file from C:\ on the build path throws a NPE during the Ant Buildfile generation.
+++ *                     - bug fixing
++  *******************************************************************************/
++ 
++ package org.eclipse.ant.internal.ui.datatransfer;
++@@ -47,6 +48,7 @@ import javax.xml.transform.TransformerFactoryConfigurationError;
++ import javax.xml.transform.dom.DOMSource;
++ import javax.xml.transform.stream.StreamResult;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.resources.IFile;
++ import org.eclipse.core.resources.IMarker;
++@@ -712,7 +714,7 @@ public class ExportUtil {
++ 	 */
++ 	public static void addVariable(Map variable2valueMap, String s,
++ 			String projectRoot) {
++-		if (s == null || s.equals("")) //$NON-NLS-1$
+++		if (s == null || s.equals(IAntCoreConstants.EMPTY_STRING))
++ 		{
++ 			return;
++ 		}
++@@ -758,7 +760,7 @@ public class ExportUtil {
++ 		}
++ 		int baseCount = base.segmentCount();
++ 		int count = base.matchingFirstSegments(location);
++-		String temp = ""; //$NON-NLS-1$
+++		String temp = IAntCoreConstants.EMPTY_STRING;
++ 		for (int j = 0; j < baseCount - count; j++) {
++ 			temp += "../"; //$NON-NLS-1$
++ 		}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java
++index c0dabf8..1d5b070 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2006 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -12,6 +12,7 @@ package org.eclipse.ant.internal.ui.datatransfer;
++ 
++ import com.ibm.icu.text.MessageFormat;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.model.AntElementNode;
++ import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
++ 
++@@ -25,7 +26,7 @@ public class JavacTableLabelProvider extends AntModelLabelProvider {
++ 	public String getText(Object element) {
++ 		AntElementNode parent= ((AntElementNode)element).getParentNode();
++ 		if (parent == null) {
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		String targetName= super.getText(parent);
++         return MessageFormat.format(DataTransferMessages.JavacTableLabelProvider_0, new String[] {targetName});
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java
++index c043082..8d4e7a0 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2009 IBM Corporation and others.
+++ * Copyright (c) 2004, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.debug.model;
++ 
++ import java.io.File;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.debug.model.AntLineBreakpoint;
++ import org.eclipse.ant.internal.launching.debug.model.AntProperties;
++ import org.eclipse.ant.internal.launching.debug.model.AntProperty;
++@@ -133,7 +134,7 @@ public class AntDebugModelPresentation extends LabelProvider implements IDebugMo
++ 	 * @see org.eclipse.debug.ui.IDebugModelPresentation#computeDetail(org.eclipse.debug.core.model.IValue, org.eclipse.debug.ui.IValueDetailListener)
++ 	 */
++ 	public void computeDetail(IValue value, IValueDetailListener listener) {
++-		String detail = ""; //$NON-NLS-1$
+++		String detail = IAntCoreConstants.EMPTY_STRING;
++ 		try {
++ 			detail = value.getValueString();
++ 		} catch (DebugException e) {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java
++index 4f4673c..db713e3 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java	
++@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.launchConfigurations;
++ import java.util.HashMap;
++ import java.util.Map;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++@@ -270,7 +271,7 @@ public class AntBuilderTargetsTab extends AbstractLaunchConfigurationTab {
++     private void initializeBuildKinds(ILaunchConfiguration configuration) {
++         String buildKindString= null;
++         try {
++-            buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, ""); //$NON-NLS-1$
+++            buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, IAntCoreConstants.EMPTY_STRING);
++         } catch (CoreException e) {
++             AntUIPlugin.log("Error reading configuration", e); //$NON-NLS-1$
++         }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java
++index 8234c55..2ffad58 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.launchConfigurations;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.runtime.IProgressMonitor;
++ import org.eclipse.debug.core.ILaunchConfiguration;
++@@ -42,6 +43,6 @@ public class AntJavaLaunchDelegate extends JavaLaunchDelegate {
++ 			return super.getProgramArguments(configuration);
++ 		} catch (CoreException ce) {
++ 		}
++-		return configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""); //$NON-NLS-1$
+++		return configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING);
++ 	}
++ }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
++index ef417b9..bd5bc7f 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.launchConfigurations;
++ import java.util.ArrayList;
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -320,7 +321,7 @@ public class AntLaunchShortcut implements ILaunchShortcut2 {
++ 			if (!DebugUITools.saveBeforeLaunch()) {
++ 				return;
++ 			}
++-			IStatus status = new Status(IStatus.INFO, IAntUIConstants.PLUGIN_ID, IAntUIConstants.STATUS_INIT_RUN_ANT, "", null); //$NON-NLS-1$
+++			IStatus status = new Status(IStatus.INFO, IAntUIConstants.PLUGIN_ID, IAntUIConstants.STATUS_INIT_RUN_ANT, IAntCoreConstants.EMPTY_STRING, null);
++ 			String groupId;
++ 			if (mode.equals(ILaunchManager.DEBUG_MODE)) {
++ 			    groupId= IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP;
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java
++index 209aa6c..e3b9a54 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.launchConfigurations;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -96,7 +97,7 @@ public class AntMainTab extends ExternalToolsMainTab {
++ 
++ 	private void updateProjectName(ILaunchConfigurationWorkingCopy configuration) {
++         IFile file = getIFile(configuration);
++-        String projectName= ""; //$NON-NLS-1$
+++        String projectName= IAntCoreConstants.EMPTY_STRING;
++         if (file != null) {
++             projectName= file.getProject().getName();
++         }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java
++index 1b8065f..7f41b76 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2005, 2009 IBM Corporation and others.
+++ * Copyright (c) 2005, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.launchConfigurations;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.launching.IAntLaunchConstants;
++ import org.eclipse.core.runtime.CoreException;
++@@ -61,7 +62,7 @@ public class SetTargetsDialog extends Dialog {
++     protected String getTargetsSelected() {
++ 		String defaultValue= null;
++ 		if (!fTargetsTab.isTargetSelected()) {
++-			defaultValue= ""; //$NON-NLS-1$
+++			defaultValue= IAntCoreConstants.EMPTY_STRING;
++ 		}
++         try {
++             return fConfiguration.getAttribute(IAntLaunchConstants.ATTR_ANT_TARGETS, defaultValue);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java
++index a377e9c..752e137 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -10,6 +10,7 @@
++  *******************************************************************************/
++ package org.eclipse.ant.internal.ui.launchConfigurations;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
++ import org.eclipse.ant.internal.ui.model.AntTargetNode;
++ import org.eclipse.jface.viewers.ITableLabelProvider;
++@@ -39,7 +40,7 @@ public class TargetTableLabelProvider extends AntModelLabelProvider implements I
++ 		}
++ 		String desc= ((AntTargetNode)element).getTarget().getDescription();
++ 		if (desc == null) {
++-			return ""; //$NON-NLS-1$
+++			return IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		return desc;
++ 	}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java
++index c6d8515..d27be10 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -17,6 +17,7 @@ import java.util.List;
++ import java.util.Map;
++ 
++ import org.apache.tools.ant.util.FileUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.launching.AntLaunch;
++ import org.eclipse.ant.internal.launching.AntLaunchingUtil;
++ import org.eclipse.ant.internal.launching.LinkDescriptor;
++@@ -137,7 +138,7 @@ public class TaskLinkManager {
++ 
++ 	private static boolean linkBuildFileMessage(IConsole console, IRegion region) {
++ 		
++-		String message= ""; //$NON-NLS-1$
+++		String message= IAntCoreConstants.EMPTY_STRING;
++ 		int offset= region.getOffset();
++ 		try {
++ 			message = console.getDocument().get(offset, region.getLength());
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java
++index 9b99709..c761dd0 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java	
++@@ -14,6 +14,7 @@ import java.io.File;
++ 
++ import org.apache.tools.ant.Task;
++ import org.apache.tools.ant.util.FileUtils;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor;
++ import org.xml.sax.Attributes;
++ 
++@@ -24,7 +25,7 @@ public class AntAntNode extends AntTaskNode {
++     public AntAntNode(Task task, Attributes attributes) {
++         super(task);
++         StringBuffer label= new StringBuffer("ant "); //$NON-NLS-1$
++-        fFile= attributes.getValue(IAntModelConstants.ATTR_DIR);
+++        fFile= attributes.getValue(IAntCoreConstants.DIR);
++         if (fFile != null) {
++         	if (!FileUtils.isAbsolutePath(fFile)) {
++         		File basedir= task.getProject().getBaseDir();
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java
++index 9b6940f..2529b4e 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java	
++@@ -26,6 +26,7 @@ import org.apache.tools.ant.UnknownElement;
++ import org.eclipse.ant.core.AntCorePlugin;
++ import org.eclipse.ant.core.AntCorePreferences;
++ import org.eclipse.ant.core.AntSecurityException;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -40,11 +41,11 @@ public class AntDefiningTaskNode extends AntTaskNode {
++     
++     public AntDefiningTaskNode(Task task, Attributes attributes) {
++         super(task);
++-        String label= attributes.getValue(IAntModelConstants.ATTR_NAME);
+++        String label= attributes.getValue(IAntCoreConstants.NAME);
++         if (label == null) {
++             label= task.getTaskName();
++         
++-            String file= attributes.getValue(IAntModelConstants.ATTR_FILE);
+++            String file= attributes.getValue(IAntCoreConstants.FILE);
++             if(file != null) {
++                 label=  label + " " + file; //$NON-NLS-1$
++                 fIdentifier= file;
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java
++index a1e95d6..8e21c82 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+++ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
++  * und Informatik-Technologien mbH, 
++  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
++  * All rights reserved. This program and the accompanying materials 
++@@ -23,6 +23,7 @@ import java.util.ArrayList;
++ import java.util.Iterator;
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntImageDescriptor;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUtil;
++@@ -333,7 +334,7 @@ public class AntElementNode implements IAdaptable, IAntElement {
++ 			if (buildFileName != null) {
++ 				buffer.append(buildFileName);
++ 			}
++-			buffer.append(getParentNode() != null ? getParentNode().getElementPath() : ""); //$NON-NLS-1$
+++			buffer.append(getParentNode() != null ? getParentNode().getElementPath() : IAntCoreConstants.EMPTY_STRING);
++ 			buffer.append('/');
++ 			buffer.append(getElementIdentifier());
++ 			buffer.append('[');
++@@ -347,9 +348,9 @@ public class AntElementNode implements IAdaptable, IAntElement {
++ 
++ 	private String getElementIdentifier() {
++ 		if (fElementIdentifier == null) {
++-			StringBuffer buffer= escape(new StringBuffer(getName() != null ? getName() : ""), '\\', "$/[]\\"); //$NON-NLS-1$ //$NON-NLS-2$
+++			StringBuffer buffer= escape(new StringBuffer(getName() != null ? getName() : IAntCoreConstants.EMPTY_STRING), '\\', "$/[]\\"); //$NON-NLS-1$
++ 			buffer.append('$');
++-			buffer.append(escape(new StringBuffer(getLabel() != null ? getLabel() : ""), '\\', "$/[]\\").toString()); //$NON-NLS-1$ //$NON-NLS-2$
+++			buffer.append(escape(new StringBuffer(getLabel() != null ? getLabel() : IAntCoreConstants.EMPTY_STRING), '\\', "$/[]\\").toString()); //$NON-NLS-1$
++ 			
++ 			fElementIdentifier= buffer.toString();
++ 		}
++@@ -366,28 +367,6 @@ public class AntElementNode implements IAdaptable, IAntElement {
++ 		return sb;
++ 	}
++ 
++-//	private int getElementIndexOf(AntElementNode child) {
++-//		if (getChildNodes() == null) {
++-//			return -1;
++-//		}
++-//		
++-//		int result= -1;
++-//		
++-//		Iterator iter= getChildNodes().iterator();
++-//		AntElementNode current= null;
++-//		while (current != child && iter.hasNext()) {
++-//			current= (AntElementNode) iter.next();
++-//			if (child.getElementIdentifier().equals(current.getElementIdentifier()))
++-//				result++;
++-//		}
++-//		
++-//		if (current != child) {
++-//			return -1;
++-//		}
++-//		
++-//		return result;
++-//	}
++-
++ 	/* (non-Javadoc)
++ 	 * @see java.lang.Object#equals(java.lang.Object)
++ 	 */
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java
++index 9270ba2..d1eaaf5 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java	
++@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.model;
++ import org.apache.tools.ant.BuildException;
++ import org.apache.tools.ant.Task;
++ import org.eclipse.ant.core.AntSecurityException;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -29,7 +30,7 @@ public class AntImportNode extends AntTaskNode {
++ 	
++ 	public AntImportNode(Task task, Attributes attributes) {
++ 		super(task);
++-         fFile= attributes.getValue(IAntModelConstants.ATTR_FILE);
+++         fFile= attributes.getValue(IAntCoreConstants.FILE);
++ 	}
++ 	
++ 	public String getFile() {
++@@ -98,7 +99,7 @@ public class AntImportNode extends AntTaskNode {
++ 			String textToSearch= getAntModel().getText(getOffset(), offset - getOffset());
++ 			if (textToSearch != null && textToSearch.length() != 0) {
++ 				String attributeString = AntEditorCompletionProcessor.getAttributeStringFromDocumentStringToPrefix(textToSearch);
++-				if (IAntModelConstants.ATTR_FILE.equals(attributeString)) {
+++				if (IAntCoreConstants.FILE.equals(attributeString)) {
++ 					return fFile;
++ 				}
++ 			}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
++index ea91ab8..6b8887c 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
++@@ -348,7 +348,7 @@ public class AntModel implements IAntModel {
++         // to determine the actual location of the file. Though the file 
++         // contents will not be parsed. We parse the passed document string
++         File file = getEditedFile();
++-        String filePath= ""; //$NON-NLS-1$
+++        String filePath= IAntCoreConstants.EMPTY_STRING;
++         if (file != null) {
++             filePath= file.getAbsolutePath();
++         }
++@@ -836,7 +836,7 @@ public class AntModel implements IAntModel {
++         } else if(taskName.equalsIgnoreCase("antcall")) { //$NON-NLS-1$
++             newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_TARGET));
++         } else if(taskName.equalsIgnoreCase("mkdir")) { //$NON-NLS-1$
++-            newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_DIR));
+++            newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntCoreConstants.DIR));
++         } else if(taskName.equalsIgnoreCase("copy")) { //$NON-NLS-1$
++             newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_DESTFILE));
++         } else if(taskName.equalsIgnoreCase("tar")  //$NON-NLS-1$
++@@ -869,11 +869,11 @@ public class AntModel implements IAntModel {
++             newNode= new AntAntNode(newTask, attributes);
++         } else if(taskName.equalsIgnoreCase("delete")) { //$NON-NLS-1$
++             String label = "delete "; //$NON-NLS-1$
++-            String file = attributes.getValue(IAntModelConstants.ATTR_FILE);
+++            String file = attributes.getValue(IAntCoreConstants.FILE);
++             if(file != null) {
++                 label+= file;
++             } else {
++-                file = attributes.getValue(IAntModelConstants.ATTR_DIR);
+++                file = attributes.getValue(IAntCoreConstants.DIR);
++                 if(file != null) {
++                     label+= file;
++                 }
++@@ -916,7 +916,7 @@ public class AntModel implements IAntModel {
++         }
++         String taskName= newTask.getTaskName();
++         if ("attribute".equals(taskName) || "element".equals(taskName)) { //$NON-NLS-1$ //$NON-NLS-2$
++-            String name= attributes.getValue("name"); //$NON-NLS-1$
+++            String name= attributes.getValue(IAntCoreConstants.NAME);
++             if (name != null) {
++                 newNode.setBaseLabel(name);
++             }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java
++index ff4d049..ebb00fa 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * Portions Copyright  2000-2004 The Apache Software Foundation
++  * All rights reserved. This program and the accompanying materials are made 
++  * available under the terms of the Apache Software License v2.0 which 
++@@ -13,14 +13,22 @@
++ package org.eclipse.ant.internal.ui.model;
++ 
++ import java.io.File;
+++import java.util.Collections;
++ import java.util.Enumeration;
++ import java.util.Hashtable;
+++import java.util.Iterator;
+++import java.util.Map;
+++import java.util.Map.Entry;
+++import java.util.HashMap;
++ 
++ import org.apache.tools.ant.AntClassLoader;
++ import org.apache.tools.ant.BuildException;
++ import org.apache.tools.ant.BuildListener;
++ import org.apache.tools.ant.Project;
+++import org.apache.tools.ant.PropertyHelper;
+++import org.apache.tools.ant.UnknownElement;
++ import org.apache.tools.ant.types.Path;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ 
++ /**
++  * Derived from the original Ant Project class
++@@ -32,22 +39,54 @@ import org.apache.tools.ant.types.Path;
++  */
++ public class AntModelProject extends Project {
++ 	
++-	private Hashtable fBaseProperties;
++-	private Hashtable fCurrentProperties= new Hashtable();
+++	/**
+++	 * Delegate to maintain property chaining - to make sure our project is alerted 
+++	 * to new properties being set
+++	 */
+++	class AntPropertyHelper implements PropertyHelper.PropertySetter {
+++		/* (non-Javadoc)
+++		 * @see org.apache.tools.ant.PropertyHelper.PropertySetter#setNew(java.lang.String, java.lang.Object, org.apache.tools.ant.PropertyHelper)
+++		 */
+++		public boolean setNew(String property, Object value, PropertyHelper propertyHelper) {
+++			setNewProperty(property, value.toString());
+++			return false;
+++		}
+++
+++		/* (non-Javadoc)
+++		 * @see org.apache.tools.ant.PropertyHelper.PropertySetter#set(java.lang.String, java.lang.Object, org.apache.tools.ant.PropertyHelper)
+++		 */
+++		public boolean set(String property, Object value, PropertyHelper propertyHelper) {
+++			return false;
+++		}
+++	}
+++	
++ 	private AntPropertyNode fCurrentConfiguringPropertyNode;
+++	private Map idrefs = Collections.synchronizedMap(new HashMap());
+++	private static Object loaderLock = new Object();
+++	private Hashtable loaders = null;
+++	private AntRefTable references = new AntRefTable();
+++	
+++	/**
+++	 * Constructor
+++	 * <p>
+++	 * Allows us to register a {@link PropertyHelper.PropertySetter} delegate for this project
+++	 * </p>
+++	 * @noreference This constructor is not intended to be referenced by clients.
+++	 */
+++	public AntModelProject() {
+++		PropertyHelper.getPropertyHelper(this).add(new AntPropertyHelper());
+++	}
++ 	
++ 	/* (non-Javadoc)
++ 	 * @see org.apache.tools.ant.Project#setNewProperty(java.lang.String, java.lang.String)
++ 	 */
++ 	public void setNewProperty(String name, String value) {
++-		
++-		if (fCurrentProperties.get(name) != null) {
+++		if(PropertyHelper.getPropertyHelper(this).getProperty(name) != null) {
++ 			return;
++-		} 
+++		}
++ 		//allows property values to be over-written for this parse session
++ 		//there is currently no way to remove properties from the Apache Ant project
++ 		//the project resets it properties for each parse...see reset()
++-		fCurrentProperties.put(name, value);
++ 		if (fCurrentConfiguringPropertyNode != null) {
++ 			fCurrentConfiguringPropertyNode.addProperty(name, value);
++ 		}
++@@ -66,13 +105,26 @@ public class AntModelProject extends Project {
++ 		}
++ 	}
++ 	
+++	/**
+++	 * Reset the project
+++	 */
++ 	public void reset() {
++ 		getTargets().clear();
++ 		setDefault(null);
++ 		setDescription(null);
++-		setName(""); //$NON-NLS-1$
++-		//reset the properties to the initial set
++-		fCurrentProperties= new Hashtable(fBaseProperties);
+++		setName(IAntCoreConstants.EMPTY_STRING);
+++		synchronized (loaderLock) {
+++			if(loaders != null) {
+++				Iterator i = loaders.entrySet().iterator();
+++				Entry e = null;
+++				while(i.hasNext()) {
+++					e = (Entry) i.next();
+++					AntClassLoader acl = (AntClassLoader) e.getValue();
+++					acl.cleanup();
+++					acl.clearAssertionStatus();
+++				}
+++			}
+++		}
++ 	}
++ 	
++ 	/* (non-Javadoc)
++@@ -80,39 +132,55 @@ public class AntModelProject extends Project {
++ 	 */
++ 	public String getProperty(String name) {
++ 		//override as we cannot remove properties from the Apache Ant project
++-		String result= (String)fCurrentProperties.get(name);
+++		String result= super.getProperty(name);
++ 		if (result == null) {
++-			result= getUserProperty(name);
+++			return getUserProperty(name);
++ 		}
++ 		return result;
++ 	}
++ 	
++ 	/* (non-Javadoc)
+++	 * @see org.apache.tools.ant.Project#addIdReference(java.lang.String, java.lang.Object)
+++	 */
+++	public void addIdReference(String id, Object value) {
+++		//XXX hack because we cannot look up references by id in Ant 1.8.x
+++		//see https://issues.apache.org/bugzilla/show_bug.cgi?id=49659
+++		idrefs.put(id, value);
+++	}
+++	
+++	/* (non-Javadoc)
+++	 * @see org.apache.tools.ant.Project#getReference(java.lang.String)
+++	 */
+++	public Object getReference(String key) {
+++		Object ref = references.get(key);
+++		if(ref == null) {
+++			ref = idrefs.get(key);
+++			if(ref instanceof UnknownElement) {
+++				UnknownElement ue = (UnknownElement) ref;
+++				ue.maybeConfigure();
+++				return ue.getRealThing();
+++			}
+++		}
+++		return ref;
+++	}
+++	
+++	/* (non-Javadoc)
++ 	 * @see org.apache.tools.ant.Project#getProperties()
++ 	 */
++ 	public Hashtable getProperties() {
++ 		//override as we cannot remove properties from the Apache Ant project
++-		Hashtable allProps= new Hashtable(fCurrentProperties);
+++		Hashtable allProps = super.getProperties();
++ 		allProps.putAll(getUserProperties());
++ 		allProps.put("basedir", getBaseDir().getPath()); //$NON-NLS-1$
++ 		return allProps;
++ 	}
++ 	
++ 	/* (non-Javadoc)
++-	 * @see org.apache.tools.ant.Project#init()
++-	 */
++-	public void init() throws BuildException {
++-		super.init();
++-		fBaseProperties= super.getProperties();
++-		fCurrentProperties= super.getProperties();
++-	}
++-	
++-	/* (non-Javadoc)
++ 	 * @see org.apache.tools.ant.Project#setBaseDir(java.io.File)
++ 	 */
++ 	public void setBaseDir(File baseDir) throws BuildException {
++ 		super.setBaseDir(baseDir);
++-		fCurrentProperties.put("basedir", getBaseDir().getPath()); //$NON-NLS-1$
+++		setNewProperty("basedir", getBaseDir().getPath()); //$NON-NLS-1$
++ 	}
++ 
++ 	/**
++@@ -126,12 +194,53 @@ public class AntModelProject extends Project {
++      * @see org.apache.tools.ant.Project#createClassLoader(org.apache.tools.ant.types.Path)
++      */
++     public AntClassLoader createClassLoader(Path path) {
++-    	AntClassLoader loader= super.createClassLoader(path);
++-    	if (path == null) {
++-    		//use the "fake" Eclipse runtime classpath for Ant
++-    		loader.setClassPath(Path.systemClasspath);
++-    	}
++-        
++-        return loader;
+++    	synchronized (loaderLock) {
+++    		if(loaders == null) {
+++    			loaders = new Hashtable(8);
+++    		}
+++    		Path p = path;
+++    		if(p == null) {
+++    			p = new Path(this);
+++    		}
+++    		String pstr = p.toString();
+++    		AntClassLoader loader = (AntClassLoader) loaders.get(pstr);
+++    		if(loader == null) {
+++    			loader = super.createClassLoader(path);
+++    	    	if (path == null) {
+++    	    		//use the "fake" Eclipse runtime classpath for Ant
+++    	    		loader.setClassPath(Path.systemClasspath);
+++    	    	}
+++    	    	loaders.put(pstr, loader);
+++    		}
+++    		return loader;
+++		}
+++    }
+++    
+++    /* (non-Javadoc)
+++     * @see org.apache.tools.ant.Project#addReference(java.lang.String, java.lang.Object)
+++     */
+++    public void addReference(String referenceName, Object value) {
+++    	references.put(referenceName, value);
+++    }
+++    
+++    /* (non-Javadoc)
+++     * @see org.apache.tools.ant.Project#getReferences()
+++     */
+++    public Hashtable getReferences() {
+++    	return references;
+++    }
+++    
+++    /* (non-Javadoc)
+++     * @see org.apache.tools.ant.Project#getCopyOfReferences()
+++     */
+++    public Map getCopyOfReferences() {
+++    	return new Hashtable(references);
+++    }
+++    
+++    /* (non-Javadoc)
+++     * @see org.apache.tools.ant.Project#hasReference(java.lang.String)
+++     */
+++    public boolean hasReference(String key) {
+++    	return references.contains(key);
++     }
++ }
++\ No newline at end of file
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java
++index c56db72..f4cca85 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
++@@ -15,6 +15,7 @@ import java.util.ArrayList;
++ import java.util.List;
++ 
++ import org.apache.tools.ant.Project;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++ import org.eclipse.core.resources.IFile;
++@@ -129,9 +130,9 @@ public class AntProjectNode extends AntElementNode {
++         	return null;
++         }
++         List results= new ArrayList(1);
++-    	identifier= new StringBuffer("\"").append(identifier).append('"').toString(); //$NON-NLS-1$
++-    	int defaultTargetNameOffset= textToSearch.indexOf("default"); //$NON-NLS-1$
++-    	defaultTargetNameOffset= textToSearch.indexOf(identifier, defaultTargetNameOffset);
+++    	String newidentifier= new StringBuffer("\"").append(identifier).append('"').toString(); //$NON-NLS-1$
+++    	int defaultTargetNameOffset= textToSearch.indexOf(IAntCoreConstants.DEFAULT);
+++    	defaultTargetNameOffset= textToSearch.indexOf(newidentifier, defaultTargetNameOffset);
++     	results.add(new Integer(getOffset() + defaultTargetNameOffset + 1));
++         return results;
++     }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java
++index 6a04c21..b21e3a5 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2006 IBM Corporation and others.
+++ * Copyright (c) 2004, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -19,6 +19,7 @@ import java.util.Map;
++ import org.apache.tools.ant.BuildException;
++ import org.apache.tools.ant.Task;
++ import org.eclipse.ant.core.AntSecurityException;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++ import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor;
++@@ -31,7 +32,7 @@ public class AntPropertyNode extends AntTaskNode {
++ 	
++ 	private String fValue= null;
++ 	private String fReferencedName;
++-    private String fOccurrencesStartingPoint= IAntModelConstants.ATTR_VALUE;
+++    private String fOccurrencesStartingPoint= IAntCoreConstants.VALUE;
++     private String fOccurrencesIdentifier;
++     
++ 	/*
++@@ -42,9 +43,9 @@ public class AntPropertyNode extends AntTaskNode {
++ 	
++ 	public AntPropertyNode(Task task, Attributes attributes) {
++ 		super(task);
++-		 String label = attributes.getValue(IAntModelConstants.ATTR_NAME);
+++		 String label = attributes.getValue(IAntCoreConstants.NAME);
++          if (label == null) {
++-			label = attributes.getValue(IAntModelConstants.ATTR_FILE);
+++			label = attributes.getValue(IAntCoreConstants.FILE);
++          	if (label != null) {
++          		fReferencedName= label;
++          		label=  "file="+label; //$NON-NLS-1$
++@@ -67,7 +68,7 @@ public class AntPropertyNode extends AntTaskNode {
++          		}
++          	}
++          } else {
++-         	fValue= attributes.getValue(IAntModelConstants.ATTR_VALUE);
+++         	fValue= attributes.getValue(IAntCoreConstants.VALUE);
++             if (fValue == null) {
++                 fOccurrencesStartingPoint= IAntModelConstants.ATTR_LOCATION;
++                 fValue= attributes.getValue(fOccurrencesStartingPoint);
++@@ -140,7 +141,7 @@ public class AntPropertyNode extends AntTaskNode {
++ 			String textToSearch= getAntModel().getText(getOffset(), offset - getOffset());
++ 			if (textToSearch != null && textToSearch.length() != 0) {
++ 				String attributeString = AntEditorCompletionProcessor.getAttributeStringFromDocumentStringToPrefix(textToSearch);
++-				if ("file".equals(attributeString) || "resource".equals(attributeString) || "srcFile".equals(attributeString)) {  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+++				if (IAntCoreConstants.FILE.equals(attributeString) || IAntModelConstants.ATTR_RESOURCE.equals(attributeString) || "srcFile".equals(attributeString)) {  //$NON-NLS-1$
++ 					return fReferencedName;
++ 				}
++ 			}
++@@ -214,7 +215,7 @@ public class AntPropertyNode extends AntTaskNode {
++         List results= new ArrayList();
++         if (fBaseLabel != null) {
++             if (fBaseLabel.equals(identifier)) {
++-                int nameOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+++                int nameOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
++                 nameOffset= textToSearch.indexOf(identifier, nameOffset + 1);
++                 results.add(new Integer(getOffset() + nameOffset));
++             }
++@@ -249,7 +250,7 @@ public class AntPropertyNode extends AntTaskNode {
++          if (textToSearch == null || textToSearch.length() == 0) {
++          	return false;
++          }
++-         int nameStartOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+++         int nameStartOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
++          nameStartOffset= textToSearch.indexOf("\"", nameStartOffset); //$NON-NLS-1$
++          int nameEndOffset= textToSearch.indexOf("\"", nameStartOffset + 1); //$NON-NLS-1$
++          nameEndOffset+=offset;
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java
++new file mode 100644
++index 0000000..1f04ae6
++--- /dev/null
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java	
++@@ -0,0 +1,53 @@
+++package org.eclipse.ant.internal.ui.model;
+++
+++import java.util.Hashtable;
+++
+++import org.apache.tools.ant.UnknownElement;
+++
+++/**
+++ * This class has been copied in its entirety from the static
+++ * inner class AntRefTable from {@link org.apache.tools.ant.Project}
+++ */
+++public class AntRefTable extends Hashtable {
+++
+++	private static final long serialVersionUID = 1L;
+++
+++	AntRefTable() {
+++        super();
+++    }
+++
+++    /** 
+++     * Returns the unmodified original object.
+++     * This method should be called internally to
+++     * get the &quot;real&quot; object.
+++     * The normal get method will do the replacement
+++     * of UnknownElement (this is similar with the JDNI
+++     * refs behavior).
+++     */
+++    private Object getReal(Object key) {
+++        return super.get(key);
+++    }
+++
+++    /** 
+++     * Get method for the reference table.
+++     *  It can be used to hook dynamic references and to modify
+++     * some references on the fly--for example for delayed
+++     * evaluation.
+++     *
+++     * It is important to make sure that the processing that is
+++     * done inside is not calling get indirectly.
+++     *
+++     * @param key lookup key.
+++     * @return mapped value.
+++     */
+++    public synchronized Object get(Object key) {
+++        Object o = getReal(key);
+++        if (o instanceof UnknownElement) {
+++            // Make sure that
+++            UnknownElement ue = (UnknownElement) o;
+++            ue.maybeConfigure();
+++            o = ue.getRealThing();
+++        }
+++        return o;
+++    }
+++}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java
++index 0bd4c1c..c59e984 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2004, 2009 IBM Corporation and others.
+++ * Copyright (c) 2004, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -17,6 +17,7 @@ import java.util.List;
++ import java.util.Map;
++ 
++ import org.apache.tools.ant.Target;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++@@ -179,7 +180,7 @@ public class AntTargetNode extends AntElementNode {
++         }
++         List results= new ArrayList();
++         if (getTargetName().equals(identifier)) {
++-            int nameOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+++            int nameOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
++             nameOffset= textToSearch.indexOf(identifier, nameOffset);
++             results.add(new Integer(getOffset() + nameOffset));
++         } else {
++@@ -236,7 +237,7 @@ public class AntTargetNode extends AntElementNode {
++ 		}
++ 		if (checkReferenceRegion(region, textToSearch, "depends")) { //$NON-NLS-1$
++ 			return true;
++-		} else if (checkReferenceRegion(region, textToSearch, "name")) { //$NON-NLS-1$
+++		} else if (checkReferenceRegion(region, textToSearch, IAntCoreConstants.NAME)) {
++ 			return true;
++ 		} else if (checkReferenceRegion(region, textToSearch, "if")) { //$NON-NLS-1$
++ 			return true;
++@@ -252,6 +253,6 @@ public class AntTargetNode extends AntElementNode {
++          if (textToSearch == null || textToSearch.length() == 0) {
++          	return false;
++          }
++-         return checkReferenceRegion(region, textToSearch, "name"); //$NON-NLS-1$
+++         return checkReferenceRegion(region, textToSearch, IAntCoreConstants.NAME);
++ 	}
++ }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java
++index f9c4f6e..b54be37 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -15,23 +15,14 @@ package org.eclipse.ant.internal.ui.model;
++  */
++ public interface IAntModelConstants {
++ 	
++-	/**
++-	 * Attributes of Ant elements
++-	 */
++-	public static final String ATTR_NAME= "name"; //$NON-NLS-1$
++-	public static final String ATTR_VALUE= "value"; //$NON-NLS-1$
++-    public static final String ATTR_LOCATION= "location"; //$NON-NLS-1$
++-	public static final String ATTR_DEFAULT= "default"; //$NON-NLS-1$
+++	public static final String ATTR_LOCATION= "location"; //$NON-NLS-1$
++ 	public static final String ATTR_RESOURCE= "resource"; //$NON-NLS-1$
++ 	public static final String ATTR_ENVIRONMENT= "environment"; //$NON-NLS-1$
++ 	public static final String ATTR_TARGET= "target"; //$NON-NLS-1$
++-	public static final String ATTR_DIR= "dir"; //$NON-NLS-1$
++-	public static final String ATTR_FILE= "file"; //$NON-NLS-1$
++ 	public static final String ATTR_DESTFILE= "destfile"; //$NON-NLS-1$
++ 	public static final String ATTR_SRC= "src"; //$NON-NLS-1$
++ 	public static final String ATTR_ZIPFILE= "zipfile"; //$NON-NLS-1$
++ 	public static final String ATTR_COMMAND= "command"; //$NON-NLS-1$
++ 	public static final String ATTR_EXECUTABLE= "executable"; //$NON-NLS-1$
++-	public static final String ATTR_DESCRIPTION= "description"; //$NON-NLS-1$
++ 	public static final String ATTR_ANT_FILE= "antfile"; //$NON-NLS-1$
++ }
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
++index bb9894d..515b256 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2006 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -22,6 +22,7 @@ import java.util.zip.ZipException;
++ import java.util.zip.ZipFile;
++ 
++ import org.eclipse.ant.core.IAntClasspathEntry;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.runtime.IPath;
++@@ -82,9 +83,9 @@ public class AddCustomDialog extends StatusDialog {
++ 	
++ 	private Text nameField;
++ 	
++-	private String name=""; //$NON-NLS-1$
+++	private String name= IAntCoreConstants.EMPTY_STRING;
++ 	private IAntClasspathEntry library= null;
++-	private String className=""; //$NON-NLS-1$
+++	private String className= IAntCoreConstants.EMPTY_STRING;
++ 	
++ 	private boolean editing= false;
++ 	
++@@ -394,7 +395,7 @@ public class AddCustomDialog extends StatusDialog {
++ 		// Use an empty label so that display of the element's full name
++ 		// doesn't include a confusing label
++ 		MinimizedFileSystemElement dummyParent =
++-			new MinimizedFileSystemElement("", null, true);//$NON-NLS-1$
+++			new MinimizedFileSystemElement(IAntCoreConstants.EMPTY_STRING, null, true);
++ 		dummyParent.setPopulated();
++ 		MinimizedFileSystemElement result =
++ 			new MinimizedFileSystemElement(elementLabel, dummyParent, isContainer);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
++index 09c43a7..f0b1067 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2008 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -20,6 +20,7 @@ import java.util.Iterator;
++ import java.util.List;
++ 
++ import org.eclipse.ant.core.IAntClasspathEntry;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++ import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
++@@ -221,7 +222,7 @@ public class AntClasspathBlock {
++ 		String result = dialog.open();
++ 		if (result != null) {
++ 			try {
++-				URL url = new URL("file:" + result + "/"); //$NON-NLS-2$;//$NON-NLS-1$;
+++				URL url = new URL(IAntCoreConstants.FILE_PROTOCOL + result + "/"); //$NON-NLS-1$;
++ 				((AntClasspathContentProvider)treeViewer.getContentProvider()).add(currentParent, url);
++ 			} catch (MalformedURLException e) {
++ 			}
++@@ -252,7 +253,7 @@ public class AntClasspathBlock {
++ 			String jarName = results[i];
++ 			try {
++ 				IPath path = filterPath.append(jarName).makeAbsolute();
++-				URL url = new URL("file:" + path.toOSString()); //$NON-NLS-1$;
+++				URL url = new URL(IAntCoreConstants.FILE_PROTOCOL + path.toOSString());
++ 				contentProvider.add(currentParent, url);
++ 			} catch (MalformedURLException e) {
++ 			}
++@@ -497,7 +498,7 @@ public class AntClasspathBlock {
++ 				File file = new File(rootDir, names[i]);
++ 				if (file.isFile() && file.getPath().endsWith(".jar")) { //$NON-NLS-1$
++ 					try {
++-						URL url = new URL("file:" +  file.getAbsolutePath()); //$NON-NLS-1$
+++						URL url = new URL(IAntCoreConstants.FILE_PROTOCOL +  file.getAbsolutePath());
++ 						contentProvider.add(ClasspathModel.ANT_HOME, url);
++ 					} catch (MalformedURLException e) {
++ 					}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java
++index e284013..5d7c070 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2006 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.preferences;
++ import org.eclipse.ant.core.Property;
++ import org.eclipse.ant.core.Task;
++ import org.eclipse.ant.internal.core.AntObject;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIImages;
++ import org.eclipse.ant.internal.ui.IAntUIConstants;
++ import org.eclipse.jface.viewers.IColorProvider;
++@@ -98,7 +99,7 @@ public class AntObjectLabelProvider extends LabelProvider implements ITableLabel
++                     return property.getPluginLabel();
++                 }
++         }
++-        return ""; //$NON-NLS-1$
+++        return IAntCoreConstants.EMPTY_STRING;
++     }
++     
++ 	public static Image getTypeImage() {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
++index fcdc7da..20d7f2b 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -16,6 +16,7 @@ import java.util.List;
++ import java.util.Map;
++ 
++ import org.eclipse.ant.core.Property;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.internal.ui.ColumnSorter;
++@@ -404,7 +405,7 @@ public class AntPropertiesBlock {
++ 		String lastUsedPath;
++ 		lastUsedPath= dialogSettings.get(IAntUIConstants.DIALOGSTORE_LASTEXTFILE);
++ 		if (lastUsedPath == null) {
++-			lastUsedPath= ""; //$NON-NLS-1$
+++			lastUsedPath= IAntCoreConstants.EMPTY_STRING;
++ 		}
++ 		FileDialog dialog = new FileDialog(fileTableViewer.getControl().getShell(), SWT.MULTI);
++ 		dialog.setFilterExtensions(new String[] { "*.properties", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$;
++@@ -438,7 +439,7 @@ public class AntPropertiesBlock {
++ 	 */
++ 	private void addProperty() {
++ 		String title = AntPreferencesMessages.AntPropertiesBlock_Add_Property_2;
++-		AddPropertyDialog dialog = new AddPropertyDialog(propertyTableViewer.getControl().getShell(), title, new String[]{"", ""}); //$NON-NLS-1$ //$NON-NLS-2$
+++		AddPropertyDialog dialog = new AddPropertyDialog(propertyTableViewer.getControl().getShell(), title, new String[]{IAntCoreConstants.EMPTY_STRING, IAntCoreConstants.EMPTY_STRING});
++ 		if (dialog.open() == Window.CANCEL) {
++ 			return;
++ 		}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java
++index a7681cb..fabbad7 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.preferences;
++ import java.net.MalformedURLException;
++ import java.net.URL;
++ import org.eclipse.ant.core.IAntClasspathEntry;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.runtime.CoreException;
++ import org.eclipse.core.variables.VariablesPlugin;
++@@ -99,7 +100,7 @@ public class ClasspathEntry extends AbstractClasspathEntry {
++ 			
++ 		try {
++ 			String expanded = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(fVariableString);
++-			return new URL("file:" + expanded); //$NON-NLS-1$
+++			return new URL(IAntCoreConstants.FILE_PROTOCOL + expanded);
++ 		} catch (CoreException e) {
++ 			AntUIPlugin.log(e);
++ 		} catch (MalformedURLException e) {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
++index e9c9588..d91b721 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2006 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -12,6 +12,7 @@ package org.eclipse.ant.internal.ui.preferences;
++ 
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.core.resources.IFile;
++ import org.eclipse.core.resources.IResource;
++@@ -55,14 +56,14 @@ public class FileSelectionDialog extends ElementTreeSelectionDialog {
++ 		ISelectionStatusValidator validator= new ISelectionStatusValidator() {
++ 			public IStatus validate(Object[] selection) {
++ 				if (selection.length == 0) {
++-					return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+++					return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
++ 				}
++ 				for (int i= 0; i < selection.length; i++) {
++ 					if (!(selection[i] instanceof IFile)) {
++-						return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+++						return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
++ 					}
++ 				}
++-				return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+++				return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
++ 			}			
++ 		};
++ 		setValidator(validator);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
++index 5ebb895..0745969 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -11,6 +11,7 @@
++ package org.eclipse.ant.internal.ui.preferences;
++ 
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.core.runtime.IStatus;
++ 
++ import org.eclipse.swt.SWT;
++@@ -79,7 +80,7 @@ public class MessageLine extends CLabel {
++ 				return;
++ 			}
++ 		}
++-		setText(""); //$NON-NLS-1$
+++		setText(IAntCoreConstants.EMPTY_STRING);
++ 		setImage(null);
++ 		setBackground(fNormalMsgAreaBackground);
++ 	}
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java
++index 5a05584..307b310 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2003, 2009 IBM Corporation and others.
+++ * Copyright (c) 2003, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -14,6 +14,7 @@ import java.util.ArrayList;
++ import java.util.List;
++ 
++ import org.eclipse.ant.core.AntCorePlugin;
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUtil;
++ import org.eclipse.ant.launching.IAntLaunchConstants;
++ import org.eclipse.core.externaltools.internal.IExternalToolConstants;
++@@ -208,7 +209,7 @@ public class LaunchConfigurationBuildfileChange extends Change {
++ 	 */
++ 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException {
++ 		if (fLaunchConfiguration.exists()) {
++-			String buildFileLocation= fLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+++			String buildFileLocation= fLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IAntCoreConstants.EMPTY_STRING); 
++ 			if (fOldBuildfileLocation == null || (buildFileLocation.endsWith(fOldBuildfileLocation + '}') || buildFileLocation.endsWith(fOldBuildfileLocation))) {
++ 				String projectName= fLaunchConfiguration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null);
++ 				if (fOldProjectName.equals(projectName)) {
++@@ -233,7 +234,7 @@ public class LaunchConfigurationBuildfileChange extends Change {
++             fNewLaunchConfiguration.setContainer(container);
++         }
++ 
++-		String oldBuildfileLocation= fNewLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+++		String oldBuildfileLocation= fNewLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IAntCoreConstants.EMPTY_STRING); 
++ 		String oldProjectName;
++ 		if (fNewBuildfileLocation != null) {
++             String newBuildFileLocation= oldBuildfileLocation.replaceFirst(fOldBuildfileLocation, fNewBuildfileLocation);
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
++index b8c1861..b987ecf 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2007 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -17,6 +17,7 @@ import java.util.Enumeration;
++ import java.util.Iterator;
++ import java.util.List;
++ 
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
++ import org.eclipse.ant.internal.ui.model.AntElementNode;
++ import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
++@@ -575,7 +576,7 @@ public class AntView extends ViewPart implements IResourceChangeListener, IShowI
++ 
++ 			AntProjectNodeProxy project = null;
++ 			if (nameString == null) {
++-				nameString = ""; //$NON-NLS-1$
+++				nameString = IAntCoreConstants.EMPTY_STRING;
++ 			}
++ 			project = new AntProjectNodeProxy(nameString, pathString);
++ 			if (errorString != null && Boolean.valueOf(errorString).booleanValue()) {
++diff --git a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
++index 09c8d5d..e88cfe2 100644
++--- a/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
+++++ b/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2005 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -16,6 +16,8 @@ import java.util.Iterator;
++ import java.util.List;
++ import java.util.regex.Matcher;
++ import java.util.regex.Pattern;
+++
+++import org.eclipse.ant.internal.core.IAntCoreConstants;
++ import org.eclipse.ant.internal.ui.AntUIPlugin;
++ import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
++ import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
++@@ -96,7 +98,7 @@ public class SearchForBuildFilesDialog extends InputDialog {
++ 			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_SEARCH_STRING, "build.xml"); //$NON-NLS-1$
++ 		}
++ 		if (settings.get(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE) == null) {
++-			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE, ""); //$NON-NLS-1$
+++			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE, IAntCoreConstants.EMPTY_STRING); 
++ 		} 
++ 	}
++ 
++@@ -303,7 +305,7 @@ public class SearchForBuildFilesDialog extends InputDialog {
++ 	private void setWorkingSet(IWorkingSet set) {
++ 		if (set == null) {
++ 			searchScopes= null;
++-			workingSetText.setText(""); //$NON-NLS-1$
+++			workingSetText.setText(IAntCoreConstants.EMPTY_STRING); 
++ 			validateInput();
++ 			return;
++ 		}
++diff --git a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
++index e14df99..b0e2bf1 100644
++--- a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
+++++ b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2009 IBM Corporation and others.
+++ * Copyright (c) 2009, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -24,8 +24,6 @@ public class ExternalToolsCore extends Plugin {
++ 	// The plug-in ID
++ 	public static final String PLUGIN_ID = "org.eclipse.core.externaltools"; //$NON-NLS-1$
++ 	
++-	private static final String EMPTY_STRING= ""; //$NON-NLS-1$
++-	
++ 	/**
++ 	 * Status code indicating an unexpected internal error.
++ 	 * @since 2.1
++@@ -102,7 +100,7 @@ public class ExternalToolsCore extends Plugin {
++ 	 */
++ 	public static IStatus newErrorStatus(String message, Throwable exception) {
++ 		if (message == null) {
++-			message= EMPTY_STRING; 
+++			return new Status(IStatus.ERROR, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, exception); 
++ 		}		
++ 		return new Status(IStatus.ERROR, PLUGIN_ID, 0, message, exception);
++ 	}
++diff --git a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
++index 4641a0e..b276e21 100644
++--- a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
+++++ b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -18,6 +18,14 @@ package org.eclipse.core.externaltools.internal;
++  * </p>
++  */
++ public interface IExternalToolConstants {
+++	
+++	/**
+++	 * Constant for the empty {@link String}
+++	 * 
+++	 * @since org.eclipse.core.externaltools 1.0.100
+++	 */
+++	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+++	
++ 	/**
++ 	 * Plug-in identifier for external tools UI (value <code>org.eclipse.ui.externaltools</code>).
++ 	 */
++diff --git a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
++index 00d1c63..a1ae3a6 100644
++--- a/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
+++++ b/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2010 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -166,7 +166,7 @@ public class ProgramLaunchDelegate extends LaunchConfigurationDelegate {
++ 
++ 	private String generateCommandLine(String[] commandLine) {
++ 		if (commandLine.length < 1)
++-			return ""; //$NON-NLS-1$
+++			return IExternalToolConstants.EMPTY_STRING;
++ 		StringBuffer buf = new StringBuffer();
++ 		for (int i = 0; i < commandLine.length; i++) {
++ 			buf.append(' ');
++diff --git a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java
++index 5b0c0a4..bd32a5e 100644
++--- a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java	
+++++ b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java	
++@@ -316,7 +316,7 @@ public class ExternalToolsBuilderTab extends AbstractLaunchConfigurationTab {
++ 		String buildKindString= null;
++ 		String buildScope= null;
++ 		try {
++-			buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, ""); //$NON-NLS-1$
+++			buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, IExternalToolConstants.EMPTY_STRING);
++ 			buildScope= configuration.getAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, (String)null);
++ 		} catch (CoreException e) {
++ 		}
++diff --git a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java
++index d1bf2d9..1d3a11e 100644
++--- a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java	
+++++ b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -307,9 +307,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
++ 	 * configuration.
++ 	 */
++ 	protected void updateWorkingDirectory(ILaunchConfiguration configuration) {
++-		String workingDir= ""; //$NON-NLS-1$
+++		String workingDir= IExternalToolConstants.EMPTY_STRING; 
++ 		try {
++-			workingDir= configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
+++			workingDir= configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, IExternalToolConstants.EMPTY_STRING); 
++ 		} catch (CoreException ce) {
++ 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_10, ce);
++ 		}
++@@ -321,9 +321,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
++ 	 * configuration.
++ 	 */
++ 	protected void updateLocation(ILaunchConfiguration configuration) {
++-		String location= ""; //$NON-NLS-1$
+++		String location= IExternalToolConstants.EMPTY_STRING; 
++ 		try {
++-			location= configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+++			location= configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IExternalToolConstants.EMPTY_STRING); 
++ 		} catch (CoreException ce) {
++ 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_10, ce);
++ 		}
++@@ -335,9 +335,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
++ 	 * configuration.
++ 	 */
++ 	protected void updateArgument(ILaunchConfiguration configuration) {
++-		String arguments= ""; //$NON-NLS-1$
+++		String arguments= IExternalToolConstants.EMPTY_STRING; 
++ 		try {
++-			arguments= configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, ""); //$NON-NLS-1$
+++			arguments= configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, IExternalToolConstants.EMPTY_STRING); 
++ 		} catch (CoreException ce) {
++ 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_7, ce);
++ 		}
++diff --git a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java
++index f3b82cb..16c945a 100644
++--- a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java	
+++++ b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -48,12 +48,10 @@ public final class ExternalToolsPlugin extends AbstractUIPlugin implements
++ 	/**
++ 	 * Status representing no problems encountered during operation.
++ 	 */
++-	public static final IStatus OK_STATUS = new Status(IStatus.OK, PLUGIN_ID, 0, "", null); //$NON-NLS-1$
+++	public static final IStatus OK_STATUS = new Status(IStatus.OK, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, null);
++ 		
++ 	private static ExternalToolsPlugin plugin;
++ 
++-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
++-
++ 	private static IWindowListener fWindowListener;
++ 
++ 	private static ILaunchManager launchManager;
++@@ -134,7 +132,7 @@ public final class ExternalToolsPlugin extends AbstractUIPlugin implements
++ 	 */
++ 	public static IStatus newErrorStatus(String message, Throwable exception) {
++ 		if (message == null) {
++-			message= EMPTY_STRING; 
+++			return new Status(IStatus.ERROR, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, exception); 
++ 		}		
++ 		return new Status(IStatus.ERROR, PLUGIN_ID, 0, message, exception);
++ 	}
++diff --git a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
++index 3f97506..67c457c 100644
++--- a/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java	
+++++ b/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java	
++@@ -1,5 +1,5 @@
++ /*******************************************************************************
++- * Copyright (c) 2000, 2009 IBM Corporation and others.
+++ * Copyright (c) 2000, 2011 IBM Corporation and others.
++  * All rights reserved. This program and the accompanying materials
++  * are made available under the terms of the Eclipse Public License v1.0
++  * which accompanies this distribution, and is available at
++@@ -209,7 +209,7 @@ public final class BuilderPropertyPage extends PropertyPage implements ICheckSta
++ 	
++ 		boolean projectNeedsMigration= false;
++ 		for (int i = 0; i < commands.length; i++) {
++-			String[] version= new String[] {""}; //$NON-NLS-1$
+++			String[] version= new String[] {IExternalToolConstants.EMPTY_STRING};
++ 			ILaunchConfiguration config = BuilderUtils.configFromBuildCommandArgs(project, commands[i].getArguments(), version);
++ 			if (BuilderCoreUtils.VERSION_2_1.equals(version[0])) {
++ 				// Storing the .project file of a project with 2.1 configs, will
++-- 
++1.7.4.4
++
+-- 
+1.7.4.4
+
diff --git a/debian/patches/series b/debian/patches/series
index 1597783..24b4726 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -15,3 +15,4 @@ osgi-services-symlink-javax.patch
 use-ant-1.8.2.patch
 eclipse-build-generatedScripts.patch
 generate-metadata-and-extract-swt-libraries.patch
+bp-ant-1.8.2-support.patch


hooks/post-receive
-- 
eclipse - Powerful IDE written in java - Debian package.



More information about the pkg-java-commits mailing list