Bug 553770 - Error when closing output stream of disposed MessageConsole

The fix for bug 551745 adds logging, in case an IOConsole stream is
closed after all streams of the console are considered closed (e.g. on
dispose()).

For a MessageConsole, its possible to create a new MessageConsoleStream
and close it after the MessageConsole is disposed. This will produce the
new error log entry.

This change adds any MessageConsoleStream created by
MessageConsole.newMessageStream() to IOConsole.openStream, so that the
streams created by MessageConsole are also correctly handled by
IOConsole.

Change-Id: I09156248fac6b6f63daab88b8881a197e7fe83fb
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java
index c808df6..042308f 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java
@@ -168,9 +168,7 @@
 	 */
 	public IOConsoleOutputStream newOutputStream() {
 		IOConsoleOutputStream outputStream = new IOConsoleOutputStream(this, this.charset);
-		synchronized(openStreams) {
-			openStreams.add(outputStream);
-		}
+		addOpenStream(outputStream);
 		return outputStream;
 	}
 
@@ -402,4 +400,15 @@
 	public void setCarriageReturnAsControlCharacter(boolean carriageReturnAsControlCharacter) {
 		partitioner.setCarriageReturnAsControlCharacter(carriageReturnAsControlCharacter);
 	}
+
+	/**
+	 * Registers a stream that will be managed by this console.
+	 * 
+	 * @param stream The stream which will be closed on {@link #dispose()}.
+	 */
+	void addOpenStream(Closeable stream) {
+		synchronized (openStreams) {
+			openStreams.add(stream);
+		}
+	}
 }
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java
index 3999567..ccdc077 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java
@@ -127,7 +127,9 @@
 	 * @return a new message stream connected to this console
 	 */
 	public MessageConsoleStream newMessageStream() {
-		return new MessageConsoleStream(this, this.getCharset());
+		MessageConsoleStream messageConsoleStream = new MessageConsoleStream(this, this.getCharset());
+		addOpenStream(messageConsoleStream);
+		return messageConsoleStream;
 	}
 
 	@Override