[SCM] eclipse - Powerful IDE written in java - Debian package. branch, master, updated. debian/3.5.2-9-5-g8990304

Niels Thykier nthykier at alioth.debian.org
Sat May 7 18:37:14 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 has been updated
       via  89903042da3838e25f6a69f8bf5136271c36890f (commit)
       via  f50ec6fb2c8a52b9ff24948c9a2703750a795a85 (commit)
      from  4a97a8cc673bec70f2a87aca19063f197e8852f7 (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 89903042da3838e25f6a69f8bf5136271c36890f
Author: Niels Thykier <niels at thykier.net>
Date:   Sat May 7 19:56:02 2011 +0200

    Backported patch to improve ant 1.8.2 support

commit f50ec6fb2c8a52b9ff24948c9a2703750a795a85
Author: Niels Thykier <niels at thykier.net>
Date:   Sat May 7 16:22:07 2011 +0200

    Bumped (Build-)Depends for ant and lucene2

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

Summary of changes:
 debian/changelog                                   |    6 +
 debian/control                                     |   12 +-
 debian/patches/bp-ant-1.8.2-support.patch          | 2152 ++++++++++++++++++++
 debian/patches/bp-build-with-ant-1.8.2.patch       |   18 +
 debian/patches/series                              |    2 +
 .../org/eclipse/ant/core/AntCorePreferences.java   |   67 +-
 .../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 +-
 .../ui/editor/AntEditorCompletionProcessor.java    |   41 +-
 .../ant/internal/ui/editor/text/XMLTextHover.java  |   17 +-
 .../internal/ui/datatransfer/BuildFileCreator.java |  128 +-
 .../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       |    7 +-
 .../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        |    5 +-
 .../org/eclipse/ant/internal/ui/views/AntView.java |    5 +-
 .../views/actions/SearchForBuildFilesDialog.java   |    8 +-
 .../internal/ui/antsupport/InternalAntRunner.java  |   19 +-
 nonosgidependencies.properties                     |    2 -
 37 files changed, 2692 insertions(+), 246 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 96951ef..42e7eac 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,15 @@
 eclipse (3.5.2-10) UNRELEASED; urgency=low
 
+  [ Benjamin Drung ]
   * debian/extra/eclipse: Actually, don't export UBUNTU_MENUPROXY=0 here
     because that affects launched applications too.  Instead, it is
     blacklisted by appmenu-gtk (Closes: #616003).
 
+  [ Niels Thykier ]
+  * Bump ant and lucene2 (Build-)Depends. (Closes: #624213)
+  * Backported patch from upstream to improve the ant 1.8.2 support in
+    eclipse.
+
  -- Benjamin Drung <bdrung at debian.org>  Sat, 26 Mar 2011 19:28:21 +0100
 
 eclipse (3.5.2-9) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 0eccbe7..cd8472d 100644
--- a/debian/control
+++ b/debian/control
@@ -5,7 +5,7 @@ Maintainer: Debian Orbital Alignment Team <pkg-java-maintainers at lists.alioth.deb
 Uploaders: Niels Thykier <niels at thykier.net>,
            Benjamin Drung <bdrung at debian.org>,
            Adnan Hodzic <adnan at foolcontrol.org>
-Build-Depends: ant (>= 1.7.1),
+Build-Depends: ant (>= 1.8.2),
                ant-optional,
                debhelper (>= 7.0.50~),
                default-jdk,
@@ -29,8 +29,8 @@ Build-Depends: ant (>= 1.7.1),
                libjasper-java,
                libjetty-java (>= 6.1.24-4~),
                libjsch-java (>= 0.1.37-3),
-               liblucene2-java (>= 2.9.3+ds1),
-               liblucene2-java (<< 2.9.4),
+               liblucene2-java (>= 2.9.4+ds1),
+               liblucene2-java (<< 2.9.5),
                libpango1.0-dev,
                libservlet2.5-java (>= 6.0.20-8),
                libxt-dev,
@@ -117,7 +117,7 @@ Description: Eclipse Plug-in Development Environment (PDE)
 
 Package: eclipse-platform
 Architecture: any
-Depends: ant (>= 1.7.1),
+Depends: ant (>= 1.8.2),
          ant-optional,
          default-jre | java5-runtime | java6-runtime,
          eclipse-platform-data (>= ${source:Version}),
@@ -130,8 +130,8 @@ Depends: ant (>= 1.7.1),
          libjasper-java,
          libjetty-java (>= 6.1.24-4~),
          libjsch-java (>= 0.1.37-3),
-         liblucene2-java (>= 2.9.3+ds1),
-         liblucene2-java (<< 2.9.4),
+         liblucene2-java (>= 2.9.4+ds1),
+         liblucene2-java (<< 2.9.5),
          libservlet2.5-java (>= 6.0.20-8),
          sat4j (>= 2.2.3),
          sat4j (<< 2.2.4),
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..9da6e7a
--- /dev/null
+++ b/debian/patches/bp-ant-1.8.2-support.patch
@@ -0,0 +1,2152 @@
+diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+index 3834493..5c3d03b 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
++++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+@@ -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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+index edddfbf..2797399 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
+index 41b1605..0db8c2a 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
+index bfec707..7eede73 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
+index 45d19ec..9069438 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
+index 483b4b3..0e54eeb 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
+index 2b0fc00..30ab90f 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
+index 30c2dbc..1c84381 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
+index 22d5b4b..2a48c60 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+index 4b69c48..752c21a 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
+index f192299..c069c4c 100644
+--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
+index b563d0f..58c824e 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
++++ b/eclipse/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 
+@@ -42,6 +42,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;
+@@ -299,12 +300,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];
+@@ -487,14 +489,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);
+ 		}
+ 
+@@ -826,7 +828,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;
+ 			}
+ 		}
+@@ -1320,7 +1322,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;
+     }
+@@ -1384,14 +1386,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)) {
+@@ -1565,7 +1572,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/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
+index 2bf7d3c..c162383 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
++++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
+@@ -21,6 +21,8 @@ import org.apache.tools.ant.types.PatternSet;
+ 
+ import org.eclipse.swt.widgets.Shell;
+ 
++import org.eclipse.ant.internal.core.IAntCoreConstants;
++
+ import org.eclipse.ant.internal.ui.debug.model.AntProperty;
+ import org.eclipse.ant.internal.ui.debug.model.AntStackFrame;
+ import org.eclipse.ant.internal.ui.debug.model.AntValue;
+@@ -208,8 +210,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++) {
+@@ -309,24 +311,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
+index c1a4a08..7fbff2b 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
++++ b/eclipse/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;
+@@ -264,8 +266,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;               
+@@ -290,8 +292,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);
+         
+@@ -419,7 +421,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 
+                 {
+@@ -431,7 +433,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);
+             }
+         }
+@@ -478,7 +480,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);
+@@ -494,11 +496,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);
+     }
+@@ -547,7 +549,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();)
+         {            
+@@ -556,7 +558,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);
+             }
+         }
+@@ -600,7 +602,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);
+@@ -609,21 +611,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);
+                 }
+                 
+@@ -643,7 +645,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();)
+         {
+@@ -652,7 +654,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);
+             }
+         }
+@@ -667,7 +669,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);           
+@@ -683,7 +685,7 @@ public class BuildFileCreator
+         //     <ant antfile="${hello.location}/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();)
+@@ -710,7 +712,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);
+         
+@@ -749,7 +751,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$
+@@ -777,14 +779,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$
+@@ -821,8 +823,8 @@ public class BuildFileCreator
+         //     <ant antfile="${hello.location}/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();
+@@ -879,12 +881,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);
+@@ -908,11 +910,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$
+@@ -972,7 +974,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;
+             }
+@@ -1007,25 +1009,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);
+@@ -1044,8 +1046,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;
+         }
+@@ -1085,17 +1087,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);
+@@ -1121,22 +1123,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))
+         {
+@@ -1145,32 +1147,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);
+@@ -1193,14 +1195,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
+index ea91ab8..6b8887c 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java
+index ff4d049..d8faf4e 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
++++ b/eclipse/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.HashMap;
+ import java.util.Hashtable;
++import java.util.Iterator;
++import java.util.Map;
++import java.util.Map.Entry;
+ 
+ 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 +40,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 +106,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 +133,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 +195,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java
+index c56db72..f4cca85 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java
+index 6a04c21..b21e3a5 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java
+index 0413e66..bf37cd4 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
++++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
+@@ -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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
+index bb9894d..515b256 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
+index 09c43a7..f0b1067 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java
+index e284013..5d7c070 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
+index fcdc7da..20d7f2b 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java
+index a7681cb..fabbad7 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
+index e9c9588..d91b721 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
+index 5ebb895..0745969 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java
+index 2630adf..1c752d2 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
++++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
+@@ -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.ui.launching.IAntLaunchConfigurationConstants;
+ import org.eclipse.core.resources.IContainer;
+@@ -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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
+index b8c1861..b987ecf 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
+index 09c8d5d..e88cfe2 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
++++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java
+index 9d228a9..3dacffc 100644
+--- a/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java	
++++ b/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java	
+@@ -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.ui.antsupport.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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java b/eclipse/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/eclipse/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/debian/patches/bp-build-with-ant-1.8.2.patch b/debian/patches/bp-build-with-ant-1.8.2.patch
new file mode 100644
index 0000000..4f09afe
--- /dev/null
+++ b/debian/patches/bp-build-with-ant-1.8.2.patch
@@ -0,0 +1,18 @@
+Description: Remove ant+trax and ant-nodeps that has been removed in ant
+ 1.8.2.
+Origin: upstream
+
+diff --git a/nonosgidependencies.properties b/nonosgidependencies.properties
+index 2a28ce9..9ae7ec5 100644
+--- a/nonosgidependencies.properties
++++ b/nonosgidependencies.properties
+@@ -13,9 +13,7 @@ org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar=/usr/share/java/ant/ant-
+ org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar=/usr/share/java/ant/ant-jsch.jar:/usr/share/java/ant-jsch.jar
+ org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar=/usr/share/java/ant/ant-junit.jar:/usr/share/java/ant-junit.jar
+ org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar=/usr/share/java/ant-launcher.jar:/usr/share/java/ant-launcher.jar
+-org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar=/usr/share/java/ant/ant-nodeps.jar:/usr/share/java/ant-nodeps.jar
+ org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar=/usr/share/java/ant/ant-swing.jar:/usr/share/java/ant-swing.jar
+-org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar=/usr/share/java/ant/ant-trax.jar:/usr/share/java/ant-trax.jar
+ org.junit_3.8.2.v20090203-1005/junit.jar=/usr/share/java/junit.jar
+ org.junit4/junit.jar=/usr/share/java/junit4.jar
+ org.apache.ant_1.7.1.v20090120-1145/bin/ant=/usr/share/ant/bin/ant
diff --git a/debian/patches/series b/debian/patches/series
index bde6336..28a0bc2 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -25,3 +25,5 @@ pdebuild-workspace.patch
 bp-osgi-ignore-root-CA.patch
 bp-osgi-allow-illegal-os-qualifier.patch
 bp-eclipse-help-webapps-xss-BZ661901.patch
+bp-build-with-ant-1.8.2.patch
+bp-ant-1.8.2-support.patch
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
index 3834493..5c3d03b 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
@@ -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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index edddfbf..2797399 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
index 41b1605..0db8c2a 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
index bfec707..7eede73 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
index 45d19ec..9069438 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
index 483b4b3..0e54eeb 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
index 2b0fc00..30ab90f 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
index 30c2dbc..1c84381 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
index 22d5b4b..2a48c60 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
index 4b69c48..752c21a 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
index f192299..c069c4c 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
index b563d0f..58c824e 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
+++ b/eclipse/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 
@@ -42,6 +42,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;
@@ -299,12 +300,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];
@@ -487,14 +489,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);
 		}
 
@@ -826,7 +828,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;
 			}
 		}
@@ -1320,7 +1322,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;
     }
@@ -1384,14 +1386,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)) {
@@ -1565,7 +1572,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/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
index 2bf7d3c..c162383 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
@@ -21,6 +21,8 @@ import org.apache.tools.ant.types.PatternSet;
 
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
+
 import org.eclipse.ant.internal.ui.debug.model.AntProperty;
 import org.eclipse.ant.internal.ui.debug.model.AntStackFrame;
 import org.eclipse.ant.internal.ui.debug.model.AntValue;
@@ -208,8 +210,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++) {
@@ -309,24 +311,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
index c1a4a08..7fbff2b 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
+++ b/eclipse/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;
@@ -264,8 +266,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;               
@@ -290,8 +292,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);
         
@@ -419,7 +421,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 
                 {
@@ -431,7 +433,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);
             }
         }
@@ -478,7 +480,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);
@@ -494,11 +496,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);
     }
@@ -547,7 +549,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();)
         {            
@@ -556,7 +558,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);
             }
         }
@@ -600,7 +602,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);
@@ -609,21 +611,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);
                 }
                 
@@ -643,7 +645,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();)
         {
@@ -652,7 +654,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);
             }
         }
@@ -667,7 +669,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);           
@@ -683,7 +685,7 @@ public class BuildFileCreator
         //     <ant antfile="${hello.location}/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();)
@@ -710,7 +712,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);
         
@@ -749,7 +751,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$
@@ -777,14 +779,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$
@@ -821,8 +823,8 @@ public class BuildFileCreator
         //     <ant antfile="${hello.location}/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();
@@ -879,12 +881,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);
@@ -908,11 +910,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$
@@ -972,7 +974,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;
             }
@@ -1007,25 +1009,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);
@@ -1044,8 +1046,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;
         }
@@ -1085,17 +1087,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);
@@ -1121,22 +1123,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))
         {
@@ -1145,32 +1147,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);
@@ -1193,14 +1195,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index ea91ab8..6b8887c 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java
index ff4d049..d8faf4e 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
+++ b/eclipse/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.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
 
 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 +40,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 +106,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 +133,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 +195,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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java
index c56db72..f4cca85 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java
index 6a04c21..b21e3a5 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java b/eclipse/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/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java
index 0413e66..bf37cd4 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
@@ -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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
index bb9894d..515b256 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
index 09c43a7..f0b1067 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java
index e284013..5d7c070 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
index fcdc7da..20d7f2b 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java
index a7681cb..fabbad7 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
index e9c9588..d91b721 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
index 5ebb895..0745969 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java
index 2630adf..1c752d2 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
@@ -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.ui.launching.IAntLaunchConfigurationConstants;
 import org.eclipse.core.resources.IContainer;
@@ -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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index b8c1861..b987ecf 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
index 09c8d5d..e88cfe2 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
+++ b/eclipse/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/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java
index 9d228a9..3dacffc 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/InternalAntRunner.java	
@@ -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.ui.antsupport.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/nonosgidependencies.properties b/nonosgidependencies.properties
index 2a28ce9..9ae7ec5 100644
--- a/nonosgidependencies.properties
+++ b/nonosgidependencies.properties
@@ -13,9 +13,7 @@ org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar=/usr/share/java/ant/ant-
 org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar=/usr/share/java/ant/ant-jsch.jar:/usr/share/java/ant-jsch.jar
 org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar=/usr/share/java/ant/ant-junit.jar:/usr/share/java/ant-junit.jar
 org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar=/usr/share/java/ant-launcher.jar:/usr/share/java/ant-launcher.jar
-org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar=/usr/share/java/ant/ant-nodeps.jar:/usr/share/java/ant-nodeps.jar
 org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar=/usr/share/java/ant/ant-swing.jar:/usr/share/java/ant-swing.jar
-org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar=/usr/share/java/ant/ant-trax.jar:/usr/share/java/ant-trax.jar
 org.junit_3.8.2.v20090203-1005/junit.jar=/usr/share/java/junit.jar
 org.junit4/junit.jar=/usr/share/java/junit4.jar
 org.apache.ant_1.7.1.v20090120-1145/bin/ant=/usr/share/ant/bin/ant


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



More information about the pkg-java-commits mailing list