@Override
    public void processMessage(BuildMessage msg) {
      String messageText;
      if (msg instanceof CompilerMessage) {
        CompilerMessage compilerMessage = (CompilerMessage) msg;
        if (compilerMessage.getSourcePath() == null) {
          messageText = msg.getMessageText();
        }
        else if (compilerMessage.getLine() < 0) {
          messageText = compilerMessage.getSourcePath() + ": " +  msg.getMessageText();
        }
        else {
          messageText = compilerMessage.getSourcePath() + "(" + compilerMessage.getLine() + ":" + compilerMessage.getColumn() + "): " +  msg.getMessageText();
        }
      }
      else {
        messageText = msg.getMessageText();
      }
      if (messageText.isEmpty()) return;
      if (msg.getKind() == BuildMessage.Kind.ERROR) {
        System.err.println("Error: " + messageText);
        hasErrors = true;
      }

      else if (msg.getKind() != BuildMessage.Kind.PROGRESS || !messageText.startsWith("Compiled") && !messageText.startsWith("Copying")) {
        System.out.println(messageText);
      }
    }
@Override
    public void processMessage(BuildMessage msg)