@Override public void processTerminated(ProcessEvent event) { LOG.warn("Watcher terminated with exit code " + event.getExitCode()); myProcessHandler = null; try { startupProcess(true); } catch (IOException e) { shutdownProcess(); LOG.warn( "Watcher terminated and attempt to restart has failed. Exiting watching thread.", e); } }
@Override public void onTextAvailable(ProcessEvent event, Key outputType) { if (outputType == ProcessOutputTypes.STDERR) { LOG.warn(event.getText().trim()); } if (outputType != ProcessOutputTypes.STDOUT) { return; } final String line = event.getText().trim(); if (LOG.isDebugEnabled()) { LOG.debug(">> " + line); } if (myLastOp == null) { final WatcherOp watcherOp; try { watcherOp = WatcherOp.valueOf(line); } catch (IllegalArgumentException e) { LOG.error("Illegal watcher command: " + line); return; } if (watcherOp == WatcherOp.GIVEUP) { notifyOnFailure(ApplicationBundle.message("watcher.gave.up"), null); myIsShuttingDown = true; } else if (watcherOp == WatcherOp.RESET) { reset(); } else { myLastOp = watcherOp; } } else if (myLastOp == WatcherOp.MESSAGE) { notifyOnFailure(line, NotificationListener.URL_OPENING_LISTENER); myLastOp = null; } else if (myLastOp == WatcherOp.REMAP || myLastOp == WatcherOp.UNWATCHEABLE) { if ("#".equals(line)) { if (myLastOp == WatcherOp.REMAP) { processRemap(); } else { mySettingRoots.decrementAndGet(); processUnwatchable(); } myLines.clear(); myLastOp = null; } else { myLines.add(line); } } else { String path = line.replace('\0', '\n'); // unescape processChange(path, myLastOp); myLastOp = null; } }