    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one or more
    003 * contributor license agreements.  See the NOTICE file distributed with
    004 * this work for additional information regarding copyright ownership.
    005 * The ASF licenses this file to You under the Apache License, Version 2.0
    006 * (the "License"); you may not use this file except in compliance with
    007 * the License.  You may obtain a copy of the License at
    008 *
    009 *      http://www.apache.org/licenses/LICENSE-2.0
    010 *
    011 *  Unless required by applicable law or agreed to in writing, software
    012 *  distributed under the License is distributed on an "AS IS" BASIS,
    013 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014 *  See the License for the specific language governing permissions and
    015 *  limitations under the License.
    016 *
    017 */
    018package org.apache.bcel.verifier.exc;
    019
    020
    021/**
    022 * Instances of this class should never be thrown. When such an instance is thrown,
    023 * this is due to an INTERNAL ERROR of BCEL's class file verifier &quot;JustIce&quot;.
    024 *
    025 */
    026public final class AssertionViolatedException extends RuntimeException{
    027    private static final long serialVersionUID = -129822266349567409L;
    028    /** The error message. */
    029    private String detailMessage;
    030    /** Constructs a new AssertionViolatedException with null as its error message string. */
    031    public AssertionViolatedException() {
    032        super();
    033    }
    034    /**
    035     * Constructs a new AssertionViolatedException with the specified error message preceded
    036     * by &quot;INTERNAL ERROR: &quot;.
    037     */
    038    public AssertionViolatedException(String message) {
    039        super(message = "INTERNAL ERROR: "+message); // Thanks to Java, the constructor call here must be first.
    040        detailMessage=message;
    041    }
    042    /**
    043     * Constructs a new AssertionViolationException with the specified error message and initial cause
    044     * @since 6.0
    045     */
    046    public AssertionViolatedException(String message, final Throwable initCause) {
    047        super(message = "INTERNAL ERROR: "+message, initCause);
    048        detailMessage=message;
    049    }
    050    /** Extends the error message with a string before ("pre") and after ("post") the
    051        'old' error message. All of these three strings are allowed to be null, and null
    052        is always replaced by the empty string (""). In particular, after invoking this
    053        method, the error message of this object can no longer be null.
    054    */
    055    public void extendMessage(String pre, String post) {
    056        if (pre  == null) {
    057            pre="";
    058        }
    059        if (detailMessage == null) {
    060            detailMessage="";
    061        }
    062        if (post == null) {
    063            post="";
    064        }
    065        detailMessage = pre+detailMessage+post;
    066    }
    067    /**
    068     * Returns the error message string of this AssertionViolatedException object.
    069     * @return the error message string of this AssertionViolatedException.
    070     */
    071    @Override
    072    public String getMessage() {
    073        return detailMessage;
    074    }
    075
    076    /**
    077     * DO NOT USE. It's for experimental testing during development only.
    078     */
    079    public static void main(final String[] args) {
    080        final AssertionViolatedException ave = new AssertionViolatedException("Oops!");
    081        ave.extendMessage("\nFOUND:\n\t","\nExiting!!\n");
    082        throw ave;
    083    }
    084
    085}