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

org.codehaus.plexus.compiler.CompilerMessage Maven / Gradle / Ivy

package org.codehaus.plexus.compiler;

/**
 * The MIT License
 *
 * Copyright (c) 2005, The Codehaus
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is furnished to do
 * so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/**
 *
 * Copyright 2004 The Apache Software Foundation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/**
 * This class encapsulates a message produced by a programming language
 * processor (whether interpreted or compiled).
 *
 * @author Stefano Mazzocchi
 * @since 2.0
 */
public class CompilerMessage {
    private static final String JDK_6_NOTE_PREFIX = "note: ";

    private static final String JDK_6_WARNING_PREFIX = "warning: ";

    /**
     * The kind of message.
     */
    private final Kind kind;

    /**
     * The start line number of the offending program text
     */
    private int startline;

    /**
     * The start column number of the offending program text
     */
    private int startcolumn;

    /**
     * The end line number of the offending program text
     */
    private int endline;

    /**
     * The end column number of the offending program text
     */
    private int endcolumn;

    /**
     * The name of the file containing the offending program text
     */
    private String file;

    /**
     * The actual message text produced by the language processor
     */
    private final String message;

    /**
     * Constructs a compiler message.
     *
     * @param file        The name of the file containing the offending program text
     * @param error       true if this is a error message, or false if it
     *                    is a warning message
     * @param startline   The start line number of the offending program text
     * @param startcolumn The start column number of the offending program text
     * @param endline     The end line number of the offending program text
     * @param endcolumn   The end column number of the offending program text
     * @param message     The actual message text produced by the language processor
     * @deprecated Use {@link #CompilerMessage(String, Kind, int, int, int, int, String)} instead
     */
    @Deprecated
    public CompilerMessage(
            final String file,
            final boolean error,
            final int startline,
            final int startcolumn,
            final int endline,
            final int endcolumn,
            final String message) {
        this.file = file;
        this.kind = error ? Kind.ERROR : Kind.WARNING;
        this.startline = startline;
        this.startcolumn = startcolumn;
        this.endline = endline;
        this.endcolumn = endcolumn;

        this.message = cleanupMessage(message);
    }

    /**
     * Constructs a compiler message.
     *
     * @param file        The name of the file containing the offending program text
     * @param kind        The kind of message
     * @param startline   The start line number of the offending program text
     * @param startcolumn The start column number of the offending program text
     * @param endline     The end line number of the offending program text
     * @param endcolumn   The end column number of the offending program text
     * @param message     The actual message text produced by the language processor
     */
    public CompilerMessage(
            final String file,
            final Kind kind,
            final int startline,
            final int startcolumn,
            final int endline,
            final int endcolumn,
            final String message) {
        this.file = file;
        this.kind = kind;
        this.startline = startline;
        this.startcolumn = startcolumn;
        this.endline = endline;
        this.endcolumn = endcolumn;
        this.message = cleanupMessage(message);
    }

    /**
     * The warning message constructor.
     *
     * @param message The actual message text produced by the language processor
     * @deprecated Use {@link #CompilerMessage(String, Kind)} instead
     */
    @Deprecated
    public CompilerMessage(final String message) {
        this.kind = Kind.WARNING;
        this.message = cleanupMessage(message);
    }

    /**
     * Constructs a compiler message.
     *
     * @param message The actual message text produced by the language processor
     * @param error   true if this is a error message, or false if it
     *                is a warning message
     * @deprecated Use {@link #CompilerMessage(String, Kind)} instead
     */
    @Deprecated
    public CompilerMessage(final String message, final boolean error) {
        this.kind = error ? Kind.ERROR : Kind.WARNING;
        this.message = cleanupMessage(message);
    }

    /**
     * Constructs a compiler message.
     *
     * @param message The actual message text produced by the language processor
     * @param kind    The kind of message
     * @since 2.0
     */
    public CompilerMessage(final String message, final Kind kind) {
        this.kind = kind;
        this.message = cleanupMessage(message);
    }

    /**
     * Returns the filename associated with this compiler message.
     *
     * @return The filename associated with this compiler message
     */
    public String getFile() {
        return file;
    }

    /**
     * Asserts whether this is an error message or not.
     *
     * @return Whether the message is an error message
     */
    public boolean isError() {
        return kind == Kind.ERROR;
    }

    /**
     * Returns the starting line number of the program text originating this compiler
     * message.
     *
     * @return The starting line number of the program text originating this message
     */
    public int getStartLine() {
        return startline;
    }

    /**
     * Returns the starting column number of the program text originating this
     * compiler message.
     *
     * @return The starting column number of the program text originating this
     *         message
     */
    public int getStartColumn() {
        return startcolumn;
    }

    /**
     * Return the ending line number of the program text originating this compiler
     * message.
     *
     * @return The ending line number of the program text originating this message
     */
    public int getEndLine() {
        return endline;
    }

    /**
     * Returns the ending column number of the program text originating this
     * compiler message.
     *
     * @return The ending column number of the program text originating this
     *         message
     */
    public int getEndColumn() {
        return endcolumn;
    }

    /**
     * Returns the message produced by the language processor.
     *
     * @return The message produced by the language processor
     */
    public String getMessage() {
        return message;
    }

    /**
     * Returns the kind of the compiler message.
     *
     * @return the kind of the message
     * @since 2.0
     */
    public Kind getKind() {
        return kind;
    }

    @Override
    public String toString() {
        if (file != null) {
            if (startline != 0) {
                if (startcolumn != 0) {
                    return file + ":" + "[" + startline + "," + startcolumn + "] " + message;
                } else {
                    return file + ":" + "[" + startline + "] " + message;
                }
            } else {
                return file + ": " + message;
            }
        } else {
            return message;
        }
    }

    private String cleanupMessage(String msg) {
        if (kind == Kind.NOTE && msg.toLowerCase().startsWith(JDK_6_NOTE_PREFIX)) {
            msg = msg.substring(JDK_6_NOTE_PREFIX.length());
        } else if ((kind == Kind.WARNING || kind == Kind.MANDATORY_WARNING)
                && msg.toLowerCase().startsWith(JDK_6_WARNING_PREFIX)) {
            msg = msg.substring(JDK_6_WARNING_PREFIX.length());
        }

        return msg;
    }

    /**
     * As we are still 1.5 required we use a wrapper to Diagnostic.Kind and some compilers don't know jdk constants.
     *
     * @since 2.0
     */
    public enum Kind {
        /**
         * Problem which prevents the tool's normal completion.
         */
        ERROR("error"),
        /**
         * Problem similar to a warning, but is mandated by the tool's specification.
         */
        MANDATORY_WARNING("mandatory_warning"),
        /**
         * Informative message from the tool.
         */
        NOTE("note"),
        /**
         * Diagnostic which does not fit within the other kinds.
         */
        OTHER("other"),
        /**
         * Problem which does not usually prevent the tool from completing normally.
         */
        WARNING("warning");

        Kind(String type) {}
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy