blob: 9b8b03b3c69d5fc97486f3475e7b82dda098ac33 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ant.internal.launching.runtime.logger;
import java.io.PrintStream;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.StringUtils;
import org.eclipse.ant.core.AntSecurityException;
import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger;
import org.eclipse.core.runtime.OperationCanceledException;
public class NullBuildLogger extends AbstractEclipseBuildLogger implements BuildLogger {
protected int fMessageOutputLevel = Project.MSG_INFO;
private PrintStream fErr = null;
private PrintStream fOut = null;
protected boolean fEmacsMode = false;
/**
* An exception that has already been logged.
*/
protected Throwable fHandledException = null;
@Override
public void setMessageOutputLevel(int level) {
fMessageOutputLevel = level;
}
protected int getMessageOutputLevel() {
return fMessageOutputLevel;
}
@Override
public void setEmacsMode(boolean emacsMode) {
fEmacsMode = emacsMode;
}
@Override
public void buildStarted(BuildEvent event) {
// do nothing
}
@Override
public void buildFinished(BuildEvent event) {
String message = handleException(event);
if (message != null) {
logMessage(message, getMessageOutputLevel());
}
fHandledException = null;
}
@Override
public void targetStarted(BuildEvent event) {
// do nothing
}
@Override
public void targetFinished(BuildEvent event) {
// do nothing
}
@Override
public void taskStarted(BuildEvent event) {
// do nothing
}
@Override
public void taskFinished(BuildEvent event) {
// do nothing
}
@Override
public void messageLogged(BuildEvent event) {
logMessage(event.getMessage(), event.getPriority());
}
protected PrintStream getErrorPrintStream() {
return fErr;
}
protected PrintStream getOutputPrintStream() {
return fOut;
}
@Override
public void setErrorPrintStream(PrintStream err) {
// this build logger logs to "null" unless
// the user has explicitly set a logfile to use
if (err == System.err) {
fErr = null;
} else {
fErr = err;
}
}
@Override
public void setOutputPrintStream(PrintStream output) {
// this build logger logs to "null" unless
// the user has explicitly set a logfile to use
if (output == System.out) {
fOut = null;
} else {
fOut = output;
}
}
protected void logMessage(String message, int priority) {
if (priority > getMessageOutputLevel()) {
return;
}
if (priority == Project.MSG_ERR) {
if (getErrorPrintStream() != null && getErrorPrintStream() != System.err) {
// user has designated to log to a logfile
getErrorPrintStream().println(message);
}
} else {
if (getOutputPrintStream() != null && getOutputPrintStream() != System.out) {
// user has designated to log to a logfile
getOutputPrintStream().println(message);
}
}
}
protected String handleException(BuildEvent event) {
Throwable exception = event.getException();
if (exception == null || exception == fHandledException || exception instanceof OperationCanceledException
|| exception instanceof AntSecurityException) {
return null;
}
fHandledException = exception;
StringBuilder message = new StringBuilder();
message.append(System.lineSeparator());
message.append(RuntimeMessages.NullBuildLogger_1);
message.append(System.lineSeparator());
if (Project.MSG_VERBOSE <= fMessageOutputLevel || !(exception instanceof BuildException)) {
message.append(StringUtils.getStackTrace(exception));
} else {
if (exception instanceof BuildException) {
message.append(exception.toString()).append(System.lineSeparator());
} else {
message.append(exception.getMessage()).append(System.lineSeparator());
}
}
return message.toString();
}
}