Fixed: [Issue 190] Show protoc's output in Eclipse console.
Added different colors for commands and protoc output.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
index c2c626c..38f6929 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
@@ -10,10 +10,16 @@
import static com.google.common.io.Closeables.closeQuietly;
import static com.google.eclipse.protobuf.ui.util.Workbenches.activeWorkbenchPage;
+import static org.eclipse.core.runtime.Status.OK_STATUS;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.console.*;
+import org.eclipse.ui.progress.UIJob;
/**
* @author alruiz@google.com (Alex Ruiz)
@@ -21,7 +27,8 @@
class ConsolePrinter {
private static final String CONSOLE_NAME = "protoc";
- private MessageConsoleStream out;
+ private MessageConsoleStream signalStream;
+ private MessageConsoleStream outputStream;
static ConsolePrinter createAndDisplayConsole() throws PartInitException {
MessageConsole console = findConsole();
@@ -47,14 +54,37 @@
}
private ConsolePrinter(MessageConsole console) {
- out = console.newMessageStream();
+ signalStream = console.newMessageStream();
+ outputStream = console.newMessageStream();
+ UIJob job = new UIJob("Set colors in protoc console") {
+ @Override public IStatus runInUIThread(IProgressMonitor monitor) {
+ Display display = getDisplay();
+ signalStream.setColor(new Color(display, 0, 0, 255));
+ outputStream.setColor(new Color(display, 255, 0, 0));
+ return OK_STATUS;
+ }
+ };
+ job.schedule();
}
- void println(String message) {
- out.println(message);
+ void printSignal(String s) {
+ signalStream.println(s);
+ }
+
+ void printOutput(String s) {
+ outputStream.println(s);
}
void close() {
- closeQuietly(out);
+ close(signalStream);
+ close(outputStream);
+ }
+
+ private static void close(MessageConsoleStream stream) {
+ Color color = stream.getColor();
+ if (color != null) {
+ color.dispose();
+ }
+ closeQuietly(stream);
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
index 96de194..57156f6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
@@ -143,7 +143,7 @@
ConsolePrinter console = null;
try {
console = createAndDisplayConsole();
- console.println("[command] " + command);
+ console.printSignal(command);
Process process = Runtime.getRuntime().exec(command);
processStream(process.getErrorStream(), source, console);
process.destroy();
@@ -166,7 +166,7 @@
ProtocMarkerFactory markerFactory = new ProtocMarkerFactory(source);
while ((line = bufferedReader.readLine()) != null) {
outputParser.parseAndAddMarkerIfNecessary(line, markerFactory);
- console.println("[protoc] " + line);
+ console.printOutput(line);
}
} finally {
closeQuietly(reader);