Java tutorial
/* ******************************************************************* * 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); }