org.aspectj.bridge.Message.java Source code

Java tutorial

Introduction

Here is the source code for org.aspectj.bridge.Message.java

Source

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