Bug 338464 - EmptyStackException running UI test suite
diff --git a/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java b/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
index 94aef45..49332ed 100644
--- a/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
+++ b/ant/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
@@ -245,34 +245,38 @@
 		
 		setCurrentTask(event.getTask());
 		setConsiderTargetBreakpoints(false);
-		if (!getTasks().isEmpty()) {
+		Stack tasks = getTasks();
+		if (!tasks.isEmpty()) {
 			//cache the parent task proxy as when that task is started or finished the
 			//proxy is not yet available or is nulled out
-			Task parentTask = (Task) getTasks().peek();
+			Task parentTask = (Task) tasks.peek();
 			Object proxy = parentTask.getRuntimeConfigurableWrapper().getProxy();
 			if (proxy != null) {
 				fTaskToProxies.put(parentTask, proxy);
 			}
 		}
-		getTasks().push(getCurrentTask());
+		tasks.push(getCurrentTask());
 		waitIfSuspended();
 	}
 	
 
     public void taskFinished() {
-    	Task lastTask= (Task)getTasks().pop();
-        setLastTaskFinished(lastTask);
-        setCurrentTask(null);
-        String taskName= lastTask.getTaskName();
-       
-        if (getStepOverTask() != null) {
-        	if ((fgAntCallTaskName.equals(taskName) || fgAntTaskName.equals(taskName)) && (!fgAntCallTaskName.equals(getStepOverTask().getTaskName()) && !fgAntTaskName.equals(getStepOverTask().getTaskName()))) {
-        		setShouldSuspend(true);
-        	} else if (fTaskToProxies.remove(lastTask) instanceof MacroInstance) {
-        		setShouldSuspend(true);
-        	}
-        }
-        waitIfSuspended();
+    	Stack tasks = getTasks();
+    	if(!tasks.empty()) {
+	    	Task lastTask= (Task)tasks.pop();
+	        setLastTaskFinished(lastTask);
+	        setCurrentTask(null);
+	        String taskName= lastTask.getTaskName();
+	       
+	        if (getStepOverTask() != null) {
+	        	if ((fgAntCallTaskName.equals(taskName) || fgAntTaskName.equals(taskName)) && (!fgAntCallTaskName.equals(getStepOverTask().getTaskName()) && !fgAntTaskName.equals(getStepOverTask().getTaskName()))) {
+	        		setShouldSuspend(true);
+	        	} else if (fTaskToProxies.remove(lastTask) instanceof MacroInstance) {
+	        		setShouldSuspend(true);
+	        	}
+	        }
+    	}
+    	 waitIfSuspended();
     }
 
     public void stepOver() {
@@ -396,7 +400,7 @@
         Project projectExecuting= null;
         if (targetExecuting != null) {
             projectExecuting= targetExecuting.getProject();
-        } else { //no target...must be a task
+        } else if(!tasks.empty()) { //no target...must be a task
             Task task= (Task) tasks.peek();
             projectExecuting= task.getProject();
         }
@@ -449,13 +453,14 @@
     }
 
 	public void marshallProperties(StringBuffer propertiesRepresentation, boolean escapeLineSep) {
-		if (getTasks().isEmpty()) {
+		Stack tasks = getTasks();
+		if (tasks.isEmpty()) {
 			return;
 		}
 	    propertiesRepresentation.append(DebugMessageIds.PROPERTIES);
 	    propertiesRepresentation.append(DebugMessageIds.MESSAGE_DELIMITER);
 		
-		Project project= ((Task)getTasks().peek()).getProject();
+		Project project= ((Task)tasks.peek()).getProject();
 		Map lastProperties= getProperties(); 
 		
 	    Map currentProperties= project.getProperties();