Revert "Bug 396734 - Can't type anymore in Java Stack Trace console"

This reverts commit 5d37d3c4b8decae806eb51891065661054a25a88.
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
index 9534928..70f221c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
@@ -28,7 +28,9 @@
 import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
 import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
 import org.eclipse.jface.text.rules.FastPartitioner;
 import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -47,6 +49,24 @@
 public class JavaStackTraceConsole extends TextConsole {
 	
 	/**
+	 * Removes the stack trace console hint text displayed when
+	 * the view is first opened.  Should be called when content is
+	 * first entered into the console.
+	 */
+	private static class JavaStackTraceConsoleCleaner implements IDocumentListener {
+
+		public void documentAboutToBeChanged(DocumentEvent event) {
+			event.fDocument.removeDocumentListener(this);
+			// We must clear the document twice otherwise the ConsoleDocumentAdapter gets confused about where to insert text (Bug 396734)
+			event.fDocument.set(""); //$NON-NLS-1$
+			event.fDocument.set(""); //$NON-NLS-1$
+		}
+
+		public void documentChanged(DocumentEvent event) {
+		}
+	}
+	
+	/**
 	 * Provides a partitioner for this console type
 	 */
 	class JavaStackTraceConsolePartitioner extends FastPartitioner implements IConsoleDocumentPartitioner {
@@ -108,6 +128,10 @@
                 fin.close();
             } catch (IOException e) {
             }
+        } else {
+        	IDocument doc = getDocument();
+        	doc.set(ConsoleMessages.JavaStackTraceConsole_0);
+        	doc.addDocumentListener(new JavaStackTraceConsoleCleaner());
 		}
     }
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsoleViewer.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsoleViewer.java
index 67cf324..cf3026f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsoleViewer.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsoleViewer.java
@@ -10,17 +10,17 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui.console;
 
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import org.eclipse.jface.text.ITextOperationTarget;
+
+import org.eclipse.ui.console.TextConsoleViewer;
+
 import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.DocumentEvent;
-import org.eclipse.jface.text.IDocumentListener;
-import org.eclipse.jface.text.ITextOperationTarget;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.console.TextConsoleViewer;
 
 /**
  * provides the viewer for Java stack trace consoles
@@ -40,25 +40,6 @@
 		fConsole = console;
 		getTextWidget().setOrientation(SWT.LEFT_TO_RIGHT);
 		
-		// When the console is first opened, paint in instructions, clear them when the document is changed
-		if (getDocument().getLength() == 0){
-			final PaintListener paintListener = new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					e.gc.drawText(ConsoleMessages.JavaStackTraceConsole_0, 0, 0);
-				}
-			};
-			getTextWidget().addPaintListener(paintListener);
-			getDocument().addDocumentListener(new IDocumentListener() {
-				public void documentChanged(DocumentEvent event) {
-					getTextWidget().removePaintListener(paintListener);
-					event.fDocument.removeDocumentListener(this);
-				}
-	
-				public void documentAboutToBeChanged(DocumentEvent event) {
-				}
-			});
-		}
-
 		IPreferenceStore fPreferenceStore = JDIDebugUIPlugin.getDefault().getPreferenceStore();
         fAutoFormat = fPreferenceStore.getBoolean(IJDIPreferencesConstants.PREF_AUTO_FORMAT_JSTCONSOLE);
 	}