package io.takari.maven.plugins.compile.jdt; import java.io.File; import javax.annotation.processing.Messager; import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; import javax.tools.Diagnostic.Kind; import org.eclipse.jdt.internal.compiler.apt.dispatch.AptProblem; import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseMessagerImpl; import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl; import io.takari.incrementalbuild.MessageSeverity; import io.takari.incrementalbuild.Resource; import io.takari.maven.plugins.compile.CompilerBuildContext; class MessagerImpl extends BaseMessagerImpl implements Messager { private final CompilerBuildContext context; private final BaseProcessingEnvImpl _processingEnv; public MessagerImpl(CompilerBuildContext context, BaseProcessingEnvImpl _processingEnv) { this.context = context; this._processingEnv = _processingEnv; } @Override public void printMessage(Kind kind, CharSequence msg) { printMessage(kind, msg, null, null, null); } @Override public void printMessage(Kind kind, CharSequence msg, Element e) { printMessage(kind, msg, e, null, null); } @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a) { printMessage(kind, msg, e, null, null); } @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a, AnnotationValue v) { if (kind == Kind.ERROR) { _processingEnv.setErrorRaised(true); } AptProblem problem = createProblem(kind, msg, e, a, v); if (problem != null && problem.getOriginatingFileName() != null) { Resource<File> input = context.getProcessedSource(new File(new String(problem.getOriginatingFileName()))); input.addMessage(problem.getSourceLineNumber(), problem.getSourceColumnNumber(), problem.getMessage(), getSeverity(kind), null); } else { context.addPomMessage(msg.toString(), getSeverity(kind), null); } } private MessageSeverity getSeverity(Kind kind) { switch (kind) { case ERROR: return MessageSeverity.ERROR; case WARNING: case MANDATORY_WARNING: return MessageSeverity.WARNING; default: return MessageSeverity.INFO; } } }