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.util.Arrays; import java.util.Collections; import java.util.List; /** * Implement messages. This implementation is immutable if ISourceLocation is immutable. */ public class Message implements IMessage { private final String message; private final IMessage.Kind kind; private final Throwable thrown; private final ISourceLocation sourceLocation; private final String details; private final List<ISourceLocation> extraSourceLocations; private final boolean declared; // Is it a DEOW ? private final int id; private final int sourceStart, sourceEnd; /** * Create a (compiler) error or warning message * * @param message the String used as the underlying message * @param location the ISourceLocation, if any, associated with this message * @param isError if true, use IMessage.ERROR; else use IMessage.WARNING */ public Message(String message, ISourceLocation location, boolean isError) { this(message, (isError ? IMessage.ERROR : IMessage.WARNING), null, location); } public Message(String message, ISourceLocation location, boolean isError, ISourceLocation[] extraSourceLocations) { this(message, "", (isError ? IMessage.ERROR : IMessage.WARNING), location, null, (extraSourceLocations.length > 0 ? extraSourceLocations : null)); } /** * Create a message, handling null values for message and kind if thrown is not null. * * @param message the String used as the underlying message * @param kind the IMessage.Kind of message - not null * @param thrown the Throwable, if any, associated with this message * @param sourceLocation the ISourceLocation, if any, associated with this message * @param details descriptive information about the message * @throws IllegalArgumentException if message is null and thrown is null or has a null message, or if kind is null and thrown * is null. */ public Message(String message, String details, IMessage.Kind kind, ISourceLocation sourceLocation, Throwable thrown, ISourceLocation[] extraSourceLocations) { this(message, details, kind, sourceLocation, thrown, extraSourceLocations, false, 0, -1, -1); } public Message(String message, String details, IMessage.Kind kind, ISourceLocation sLoc, Throwable thrown, ISourceLocation[] otherLocs, boolean declared, int id, int sourcestart, int sourceend) { this.details = details; this.id = id; this.sourceStart = sourcestart; this.sourceEnd = sourceend; this.message = ((message != null) ? message : ((thrown == null) ? null : thrown.getMessage())); this.kind = kind; this.sourceLocation = sLoc; this.thrown = thrown; if (otherLocs != null) { this.extraSourceLocations = Collections.unmodifiableList(Arrays.asList(otherLocs)); } else { this.extraSourceLocations = Collections.emptyList(); } if (null == this.kind) { throw new IllegalArgumentException("null kind"); } if (null == this.message) { throw new IllegalArgumentException("null message"); } this.declared = declared; } /** * Create a message, handling null values for message and kind if thrown is not null. * * @param message the String used as the underlying message * @param kind the IMessage.Kind of message - not null * @param thrown the Throwable, if any, associated with this message * @param sourceLocation the ISourceLocation, if any, associated with this message * @throws IllegalArgumentException if message is null and thrown is null or has a null message, or if kind is null and thrown * is null. */ public Message(String message, IMessage.Kind kind, Throwable thrown, ISourceLocation sourceLocation) { this(message, "", kind, sourceLocation, thrown, null); } /** @return the kind of this message */ public IMessage.Kind getKind() { return kind; } /** @return true if kind == IMessage.ERROR */ public boolean isError() { return kind == IMessage.ERROR; } /** @return true if kind == IMessage.WARNING */ public boolean isWarning() { return kind == IMessage.WARNING; } /** @return true if kind == IMessage.DEBUG */ public boolean isDebug() { return kind == IMessage.DEBUG; } public boolean isTaskTag() { return kind == IMessage.TASKTAG; } /** * @return true if kind == IMessage.INFO */ public boolean isInfo() { return kind == IMessage.INFO; } /** @return true if kind == IMessage.ABORT */ public boolean isAbort() { return kind == IMessage.ABORT; } /** Caller can verify if this message came about because of a DEOW */ public boolean getDeclared() { return declared; } /** * @return true if kind == IMessage.FAIL */ public boolean isFailed() { return kind == IMessage.FAIL; } /** @return non-null String with simple message */ final public String getMessage() { return message; } /** @return Throwable associated with this message, or null if none */ final public Throwable getThrown() { return thrown; } /** @return ISourceLocation associated with this message, or null if none */ final public ISourceLocation getSourceLocation() { return sourceLocation; } public String toString() { return MessageUtil.renderMessage(this, false); } public String getDetails() { return details; } public List<ISourceLocation> getExtraSourceLocations() { return extraSourceLocations; } public int getID() { return id; } public int getSourceStart() { return sourceStart; } public int getSourceEnd() { return sourceEnd; } }