Bug 96868 - Memory cleanup for Ant support
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/DecayCodeCompletionDataStructuresThread.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/DecayCodeCompletionDataStructuresThread.java
index 6404de8..b5a7dc8 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/DecayCodeCompletionDataStructuresThread.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/DecayCodeCompletionDataStructuresThread.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.ant.internal.ui.editor;
 
+import org.eclipse.ant.internal.ui.editor.utils.ProjectHelper;
+
 
 public class DecayCodeCompletionDataStructuresThread extends Thread {
 	
@@ -34,12 +36,13 @@
 		setPriority(Thread.MIN_PRIORITY);
 		setDaemon(true);
 		fgInstance= this;
+        setContextClassLoader(null); //don't hold on to any class loaders
 	}
 	
 	/**
 	 * The background activity that is triggered when the last <code>AntModel</code> is disposed.
 	 * Waits for the required delay and then nulls out the memory expensive Ant code
-	 * completion data structures.
+	 * completion data structures and reset the ProjectHelper.
 	 * If an <code>AntModel</code> is created during the wait, the thread is
 	 * interrupted and no nulling out occurs.
 	 */
@@ -48,6 +51,7 @@
 			try {
 				wait(fgDelay);
 				AntEditorCompletionProcessor.resetCodeCompletionDataStructures();
+                ProjectHelper.reset();
 			} catch (InterruptedException x) {
 			}
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
index 4d8638b..3f683ae 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
@@ -238,6 +238,7 @@
 		public void reset() {
 			task= null;
 			currentTask= null;
+            fNormalizedFileNames.clear();
 		}
 	}
 	
@@ -635,6 +636,7 @@
 
     public static void reset() {
         fgXMLReader= null;
+        fu= null;
     }
     
 	public static void setAntModel(IAntModel antModel) {