diff options
Diffstat (limited to 'archive/org.eclipse.qvt.declarative.editor.imp.runtime/src/org/eclipse/imp/core/Assert.java')
-rw-r--r-- | archive/org.eclipse.qvt.declarative.editor.imp.runtime/src/org/eclipse/imp/core/Assert.java | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/archive/org.eclipse.qvt.declarative.editor.imp.runtime/src/org/eclipse/imp/core/Assert.java b/archive/org.eclipse.qvt.declarative.editor.imp.runtime/src/org/eclipse/imp/core/Assert.java new file mode 100644 index 000000000..9de055e22 --- /dev/null +++ b/archive/org.eclipse.qvt.declarative.editor.imp.runtime/src/org/eclipse/imp/core/Assert.java @@ -0,0 +1,139 @@ +/******************************************************************************* +* Copyright (c) 2007 IBM Corporation. +* 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: +* Robert Fuhrer (rfuhrer@watson.ibm.com) - initial API and implementation + +*******************************************************************************/ + +package org.eclipse.imp.core; + +/** + * <code>Assert</code> is useful for for embedding runtime sanity checks in code. The static predicate methods all + * test a condition and throw some type of unchecked exception if the condition does not hold. + * <p> + * Assertion failure exceptions, like most runtime exceptions, are thrown when something is misbehaving. Assertion + * failures are invariably unspecified behavior; consequently, clients should never rely on these being thrown (or not + * thrown). <b>If you find yourself in the position where you need to catch an assertion failure, you have most + * certainly written your program incorrectly.</b> + * </p> + * <p> + * Note that an <code>assert</code> statement is slated to be added to the Java language in JDK 1.4, rending this + * class obsolete. + * </p> + */ +public final class Assert { + + /** + * <code>AssertionFailedException</code> is a runtime exception thrown by some of the methods in + * <code>Assert</code>. + * <p> + * This class is not declared public to prevent some misuses; programs that catch or otherwise depend on assertion + * failures are susceptible to unexpected breakage when assertions in the code are added or removed. + * </p> + */ + private static class AssertionFailedException extends RuntimeException { + /** This class is not intended to be serialized. */ + private static final long serialVersionUID= 1L; + + /** + * Constructs a new exception. + */ + public AssertionFailedException() { + } + + /** + * Constructs a new exception with the given message. + * + * @param detail + * the detail message + */ + public AssertionFailedException(String detail) { + super(detail); + } + } + + /* This class is not intended to be instantiated. */ + private Assert() { + } + + /** + * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of unchecked + * exception is thrown. + * <p> + * As a general rule, parameters passed to API methods must not be <code>null</code> unless <b>explicitly</b> + * allowed in the method's specification. Similarly, results returned from API methods are never <code>null</code> + * unless <b>explicitly</b> allowed in the method's specification. Implementations are encouraged to make regular + * use of <code>Assert.isNotNull</code> to ensure that <code>null</code> parameters are detected as early as + * possible. + * </p> + * + * @param object + * the value to test + */ + public static void isNotNull(Object object) { + // succeed as quickly as possible + if (object != null) { + return; + } + isNotNull(object, ""); //$NON-NLS-1$ + } + + /** + * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of unchecked + * exception is thrown. The given message is included in that exception, to aid debugging. + * <p> + * As a general rule, parameters passed to API methods must not be <code>null</code> unless <b>explicitly</b> + * allowed in the method's specification. Similarly, results returned from API methods are never <code>null</code> + * unless <b>explicitly</b> allowed in the method's specification. Implementations are encouraged to make regular + * use of <code>Assert.isNotNull</code> to ensure that <code>null</code> parameters are detected as early as + * possible. + * </p> + * + * @param object + * the value to test + * @param message + * the message to include in the exception + */ + public static void isNotNull(Object object, String message) { + if (object == null) + throw new AssertionFailedException(IMPMessages.Assert_null_argument + message); + } + + /** + * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of unchecked exception + * is thrown. + * + * @param expression + * the outcome of the check + * @return <code>true</code> if the check passes (does not return if the check fails) + */ + public static boolean isTrue(boolean expression) { + // succeed as quickly as possible + if (expression) { + return true; + } + return isTrue(expression, ""); //$NON-NLS-1$ + } + + /** + * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of unchecked exception + * is thrown. The given message is included in that exception, to aid debugging. + * + * @param expression + * the outcome of the check + * @param message + * the message to include in the exception + * @return <code>true</code> if the check passes (does not return if the check fails) + */ + public static boolean isTrue(boolean expression, String message) { + if (!expression) + throw new AssertionFailedException(IMPMessages.Assert_assertion_failed + message); + return expression; + } + +} |