package jetbrains.mps.debugger.java.runtime.engine; /*Generated by MPS */ import com.intellij.execution.process.ProcessHandler; import java.util.List; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Key; import java.util.ArrayList; import com.intellij.execution.process.ProcessOutputTypes; import org.jetbrains.annotations.NotNull; import jetbrains.mps.debugger.java.runtime.engine.events.EventsProcessor; public class SystemMessagesReporter { private String myName; private volatile ProcessHandler myProcessHandler; private final SystemMessagesReporter.MyDebugProcessAdapter myDebugProcessListener = new SystemMessagesReporter.MyDebugProcessAdapter(); private final List<Pair<String, Key>> myPostponedMessages = new ArrayList<Pair<String, Key>>(); public SystemMessagesReporter(DebugProcessMulticaster multicaster) { multicaster.addListener(myDebugProcessListener); } public void setProcessName(String processName) { myName = processName; } public void reportInformation(String message) { reportOrPostpone(message, ProcessOutputTypes.SYSTEM); } public void reportError(String message) { reportOrPostpone(message, ProcessOutputTypes.STDERR); } private synchronized void reportOrPostpone(String message, Key key) { if (myProcessHandler == null) { myPostponedMessages.add(new Pair<String, Key>(message, key)); } else { reportInternal(message, key); } } public synchronized void setProcessHandler(ProcessHandler processHandler) { myProcessHandler = processHandler; for (Pair<String, Key> message : myPostponedMessages) { reportInternal(message.first, message.second); } } private void reportInternal(String message, Key key) { myProcessHandler.notifyTextAvailable(message + "\n", key); } private class MyDebugProcessAdapter extends DebugProcessAdapter { private MyDebugProcessAdapter() { } @Override public void processAttached(@NotNull EventsProcessor process) { reportInformation("Connected to the target VM, " + myName); } @Override public void processDetached(@NotNull EventsProcessor process, boolean closedByUser) { reportInformation("Disconnected from the target VM, " + myName); } } }