Example #1
1
    @Override
    public void onTextAvailable(ProcessEvent event, Key outputType) {
      String text = event.getText();
      if (outputType == ProcessOutputTypes.STDERR) {
        output.append(text);

        // We loop until the state stabilizes
        State lastState;
        do {
          lastState = state;
          switch (state) {
            case WAITING:
              {
                Matcher matcher = matcher(DIAGNOSTIC_PATTERN);
                if (find(matcher)) {
                  currentCompilerMessage = new CompilerMessage();
                  currentCompilerMessage.setMessageCategoryFromString(matcher.group(1));
                  state = State.ATTRIBUTES;
                }
                break;
              }
            case ATTRIBUTES:
              {
                Matcher matcher = matcher(ATTRIBUTE_PATTERN);
                int indexDelta = 0;
                while (matcher.find()) {
                  handleSkippedOutput(
                      output.subSequence(
                          firstUnprocessedIndex + indexDelta,
                          firstUnprocessedIndex + matcher.start()));
                  currentCompilerMessage.setAttributeFromStrings(
                      matcher.group(1), matcher.group(2));
                  indexDelta = matcher.end();
                }
                firstUnprocessedIndex += indexDelta;

                Matcher endMatcher = matcher(OPEN_TAG_END_PATTERN);
                if (find(endMatcher)) {
                  state = State.MESSAGE;
                }
                break;
              }
            case MESSAGE:
              {
                Matcher matcher = matcher(MESSAGE_PATTERN);
                if (find(matcher)) {
                  currentCompilerMessage.setMessage(matcher.group(1));
                  currentCompilerMessage.reportTo(compileContext);
                  state = State.WAITING;
                }
                break;
              }
          }
        } while (state != lastState);

      } else {
        compileContext.addMessage(INFORMATION, text, "", -1, -1);
      }
    }
Example #2
0
 /**
  * Run the process and notify all listeners.
  *
  * @param pArgs arguments for ProcessBuilder
  * @param pProcessEvent store state in this ProcessEvent
  */
 @SuppressWarnings("deprecation")
 void runAndNotify(LinkedList<String> pArgs, ProcessEvent pProcessEvent) {
   int rc;
   try {
     Process pr = startProcess(pArgs);
     pProcessEvent.setProcess(pr);
     for (ProcessEventListener pel : iProcessEventListener) {
       pel.processStarted(pProcessEvent);
     }
     // TODO: remove in future version
     for (ProcessListener pl : iProcessListener) {
       pl.processStarted(pr);
     }
     rc = waitForProcess(pr);
     pProcessEvent.setReturnCode(rc);
     finished(rc);
   } catch (Exception e) {
     pProcessEvent.setException(e);
     try {
       finished(e);
     } catch (Exception e2) {
       pProcessEvent.setException(e2);
     }
   }
   for (ProcessEventListener pel : iProcessEventListener) {
     pel.processTerminated(pProcessEvent);
   }
   // TODO: remove in future version
   for (ProcessListener pl : iProcessListener) {
     pl.processTerminated(pProcessEvent);
   }
 }
Example #3
0
  /**
   * Return a ProcessTask for future execution.
   *
   * @param pArgs arguments for ProcessBuilder
   */
  protected ProcessTask getProcessTask(LinkedList<String> pArgs) {
    // prepare ProcessEvent and call processInitiated
    final ProcessEvent pe = new ProcessEvent(iPID, this);
    pe.setReturnCode(-1);
    for (ProcessEventListener pel : iProcessEventListener) {
      pel.processInitiated(pe);
    }

    // create ProcessTask for future execution
    return new ProcessTask(this, pArgs, pe);
  }
Example #4
0
 @Override
 public void processTerminated(ProcessEvent event) {
   if (firstUnprocessedIndex < output.length()) {
     handleSkippedOutput(output.substring(firstUnprocessedIndex).trim());
   }
   int exitCode = event.getExitCode();
   // 0 is normal, 1 is "errors found" — handled by the messages above
   if (exitCode != 0 && exitCode != 1) {
     compileContext.addMessage(
         ERROR, "Compiler terminated with exit code: " + exitCode, "", -1, -1);
   }
 }