001 /***************************************************************************** 002 * Copyright (C) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * Original Code By: Centerline Computers, Inc. * 008 *****************************************************************************/ 009 package org.picocontainer.injectors; 010 011 import java.lang.reflect.AccessibleObject; 012 import java.lang.reflect.Constructor; 013 import java.lang.reflect.Field; 014 import java.lang.reflect.Method; 015 016 /** 017 * 018 * @author Michael Rimov 019 */ 020 public class PrimitiveMemberChecker { 021 022 /** 023 * Checks if the target argument is primative. 024 * @param member target member instance, may be constructor, field, or method. 025 * @param i parameter index. 026 * @return true if the target object's "i"th parameter is a primitive (ie, int, float, etc) 027 * @throws UnsupportedOperationException if for some reason the member parameter 028 * is not a Constructor, Method, or Field. 029 * @throws ArrayIndexOutOfBoundsException if 'i' is an inappropriate index for the 030 * given parameters. For example, i should never be anything but zero for a field. 031 */ 032 public static boolean isPrimitiveArgument(AccessibleObject member, int i) throws ArrayIndexOutOfBoundsException, UnsupportedOperationException { 033 Class[] types; 034 if (member instanceof Constructor) { 035 types = ((Constructor)member).getParameterTypes(); 036 } else if (member instanceof Method) { 037 types = ((Method)member).getParameterTypes(); 038 } else if (member instanceof Field) { 039 types = new Class[1]; 040 types[0] = ((Field)member).getType(); 041 } else { 042 //Should be field/constructor/method only. 043 throw new UnsupportedOperationException("Unsupported member type: " + member.getClass()); 044 } 045 046 if (i >= types.length) { 047 throw new ArrayIndexOutOfBoundsException("Index i > types array length " 048 + types.length + " for member " + member); 049 } 050 051 if (types[i].isPrimitive()) { 052 return true; 053 } 054 055 return false; 056 } 057 058 }