blob: 6dcdfeafb38ad9e42f382d44a6de1aa225854f6a [file] [log] [blame]
/* *******************************************************************
* Copyright (c) 1999-2001 Xerox Corporation,
* 2002 Palo Alto Research Center, Incorporated (PARC).
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Xerox/PARC initial implementation
* ******************************************************************/
package org.aspectj.bridge;
import java.io.PrintWriter;
/**
* Handle messages, logging and/or aborting as appropriate.
* Implementations define which messages are logged and whether
* the handler aborts the process.
* For messages that are costly to construct, clients may query
* {@link #isIgnoring(IMessage.Kind)}
* to avoid construction if the message will be ignored.
* Clients passing messages to an IMessageHandler should not
* interfere with aborts by catching AbortException unless
* otherwise required by their logic or the message handler.
*/
public interface IMessageHandler {
/** print all to System.err and throw AbortException on failure or abort messages */
public static final IMessageHandler SYSTEM_ERR =
new MessageWriter(new PrintWriter(System.err, true), true);
/** print all to System.out but do not throw AbortException on failure or abort messages */
public static final IMessageHandler SYSTEM_OUT =
new MessageWriter(new PrintWriter(System.out, true), false);
/** Throw exceptions for anything with ERROR or greater severity */
public static final IMessageHandler THROW =
new IMessageHandler() {
public boolean handleMessage(IMessage message) {
if (message.getKind().compareTo(IMessage.ERROR) >= 0) {
throw new AbortException(message);
} else {
return SYSTEM_OUT.handleMessage(message);
}
}
public boolean isIgnoring(IMessage.Kind kind) {
return false;
}
public void dontIgnore(IMessage.Kind kind) {
}
public void ignore(IMessage.Kind kind) {
}
};
/**
* Handle message, by reporting and/or throwing an AbortException.
* @param message the IMessage to handle - never null
* @return true if this message was handled by this handler
* @throws IllegalArgumentException if message is null
* @throws AbortException depending on handler logic.
*/
boolean handleMessage(IMessage message) throws AbortException;
/**
* Signal clients whether this will ignore messages of a given type.
* Clients may use this to avoid constructing or sending certain messages.
* @return true if this handler is ignoring all messages of this type
*/
boolean isIgnoring(IMessage.Kind kind);
/**
* Allow fine grained configuration after initialization. Minaly used in LTW. Most of the
* implementation can have this method be a no-op.
*
* @param kind
*/
void dontIgnore(IMessage.Kind kind);
/**
* Allow fine grained configuration after initialization.
*
* @param kind
*/
void ignore(IMessage.Kind kind);
}