All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.bridge.Message Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/* *******************************************************************
 * 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 v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * 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 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;
	}

	/**
	 * @return true if kind == IMessage.USAGE
	 */
	public boolean isUsage() {
		return kind == IMessage.USAGE;
	}

	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 getExtraSourceLocations() {
		return extraSourceLocations;
	}

	public int getID() {
		return id;
	}

	public int getSourceStart() {
		return sourceStart;
	}

	public int getSourceEnd() {
		return sourceEnd;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy