001 /* 002 * $Id: Contract.java 3100 2008-10-14 22:33:10Z rah003 $ 003 * 004 * Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, 005 * Santa Clara, California 95054, U.S.A. All rights reserved. 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021 package org.jdesktop.swingx.util; 022 023 024 /** 025 * Utility class for checking contracts. 026 * 027 * @author Jeanette Winzenburg 028 */ 029 public class Contract { 030 031 private Contract() { 032 033 } 034 035 /** 036 * Tests the input parameter against null. If the input is 037 * an array, checks all of its elements as well. Returns the 038 * unchanged parameter if not null, throws a NullPointerException 039 * otherwise. <p> 040 * 041 * PENDING: type of exception? there are raging debates, some 042 * favour an IllegalArgument? <p> 043 * 044 * PENDING: the implementation uses a unchecked type cast to an array. 045 * can we do better, how? 046 * 047 * 048 * @param <T> the type of the input parameter 049 * @param input the argument to check against null. 050 * @param message the text of the exception if the argument is null 051 * @return the input if not null 052 * @throws NullPointerException if input is null 053 */ 054 @SuppressWarnings("unchecked") 055 public static <T> T asNotNull(T input, String message) { 056 if (input == null) 057 throw new NullPointerException(message); 058 059 if (input.getClass().isArray()) { 060 if (!input.getClass().getComponentType().isPrimitive()) { 061 T[] array = (T[]) input; 062 for (int i = 0; i < array.length; i++) { 063 asNotNull(array[i], message); 064 } 065 } 066 } 067 068 return input; 069 } 070 }