Here you can find the source of getParamArray(String signature, int numParam, boolean returnAllParams)
Parameter | Description |
---|---|
signature | java signature |
numParam | number of parameters in the signature |
returnAllParams | flag to specify return of all params in signature |
Parameter | Description |
---|---|
ClassNotFoundException | an exception |
private static Class[] getParamArray(String signature, int numParam, boolean returnAllParams) throws ClassNotFoundException
//package com.java2s; /********************************************************************** // @@@ START COPYRIGHT @@@/*from w w w . jav a2s . co m*/ // // (C) Copyright 1997-2014 Hewlett-Packard Development Company, L.P. // // 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. // // @@@ END COPYRIGHT @@@ **********************************************************************/ import java.util.ArrayList; public class Main { /** * Builds an array of Class type for the given signature. * This method parses the signature and returns the Class object * array. If we hit '[' then set outParam and revisit the same parameter. * @param signature java signature * @param numParam number of parameters in the signature * @param returnAllParams flag to specify return of all params in signature * @return Array of Class objects represting the parameter types * in the signature * @throws ClassNotFoundException * **/ private static Class[] getParamArray(String signature, int numParam, boolean returnAllParams) throws ClassNotFoundException { ArrayList param = new ArrayList(); boolean outMode = false; for (int index = 0; index < signature.length(); index++) { switch (signature.charAt(index)) { case ')': break; case '[': outMode = true; // This param has OUT/INOUT mode break; case 'V': break; case 'S': if (outMode == true) param.add((new short[1]).getClass()); else param.add(Short.TYPE); outMode = false; break; case 'I': if (outMode == true) param.add((new int[1]).getClass()); else param.add(Integer.TYPE); outMode = false; break; case 'J': if (outMode == true) param.add((new long[1]).getClass()); else param.add(Long.TYPE); outMode = false; break; case 'F': if (outMode == true) param.add((new float[1]).getClass()); else param.add(Float.TYPE); outMode = false; break; case 'D': if (outMode == true) param.add((new double[1]).getClass()); else param.add(Double.TYPE); outMode = false; break; case 'L': String substr = signature.substring(index, signature.indexOf(";", index)); if (substr.equals("Ljava/lang/String")) { if (outMode == true) param.add((new java.lang.String[1]).getClass()); else param.add(Class.forName("java.lang.String")); index += 17; outMode = false; break; } if (substr.equals("Ljava/math/BigDecimal")) { if (outMode == true) param.add((new java.math.BigDecimal[1]).getClass()); else param.add(Class.forName("java.math.BigDecimal")); index += 21; outMode = false; break; } if (substr.equals("Ljava/sql/Date")) { if (outMode == true) param.add((new java.sql.Date[1]).getClass()); else param.add(Class.forName("java.sql.Date")); index += 14; outMode = false; break; } if (substr.equals("Ljava/sql/Timestamp")) { if (outMode == true) param.add((new java.sql.Timestamp[1]).getClass()); else param.add(Class.forName("java.sql.Timestamp")); index += 19; outMode = false; break; } if (substr.equals("Ljava/sql/Time")) { if (outMode == true) param.add((new java.sql.Time[1]).getClass()); else param.add(Class.forName("java.sql.Time")); index += 14; outMode = false; break; } if (substr.equals("Ljava/sql/ResultSet")) { if (outMode == true) param.add((new java.sql.ResultSet[1]).getClass()); else param.add(Class.forName("java.sql.ResultSet")); index += 19; outMode = false; break; } if (substr.equals("Ljava/lang/Integer")) { if (outMode == true) param.add((new java.lang.Integer[1]).getClass()); else param.add(Class.forName("java.lang.Integer")); index += 18; outMode = false; break; } if (substr.equals("Ljava/lang/Long")) { if (outMode == true) param.add((new java.lang.Long[1]).getClass()); else param.add(Class.forName("java.lang.Long")); index += 15; outMode = false; break; } if (substr.equals("Ljava/lang/Float")) { if (outMode == true) param.add((new java.lang.Float[1]).getClass()); else param.add(Class.forName("java.lang.Float")); index += 16; outMode = false; break; } if (substr.equals("Ljava/lang/Double")) { if (outMode == true) param.add((new java.lang.Double[1]).getClass()); else param.add(Class.forName("java.lang.Double")); index += 17; outMode = false; break; } outMode = false; break; } // switch ends } // for loop ends Class[] retParam; int paramCount = param.size(); if (!returnAllParams) paramCount = numParam; retParam = new Class[paramCount]; for (int i = 0; i < paramCount; i++) retParam[i] = (Class) param.get(i); return retParam; } }