package org.smoothbuild.builtin.java.javac;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
import org.smoothbuild.lang.message.ErrorMessage;
import org.smoothbuild.lang.message.InfoMessage;
import org.smoothbuild.lang.message.Message;
import org.smoothbuild.lang.message.WarningMessage;
import org.smoothbuild.lang.plugin.Container;
public class LoggingDiagnosticListener implements DiagnosticListener<JavaFileObject> {
private final Container container;
private boolean errorReported;
public LoggingDiagnosticListener(Container container) {
this.container = container;
this.errorReported = false;
}
public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
container.log(newMessage(diagnostic));
errorReported = true;
}
private static Message newMessage(Diagnostic<? extends JavaFileObject> diagnostic) {
switch (diagnostic.getKind()) {
case ERROR:
return new ErrorMessage(diagnostic.getMessage(null));
case MANDATORY_WARNING:
case WARNING:
return new WarningMessage(diagnostic.getMessage(null));
case NOTE:
case OTHER:
return new InfoMessage(diagnostic.getMessage(null));
default:
throw new RuntimeException("Unknown diagnostic kind " + diagnostic.getKind());
}
}
public boolean errorReported() {
return errorReported;
}
}