private Constructor filterConstructors(Constructor[] constructors, Class[] parameterTypes) throws TooManyMatchesException
    {
        ArrayList<Constructor> list = new ArrayList<Constructor>();
    outside1:
        for(Constructor c : constructors)
        {
            if(parameterTypes != null)
            {
                Class[] p = c.getParameterTypes();
                if(p.length != parameterTypes.length)
                {
                    continue;
                }
                for(int i = 0; i < p.length; i++)
                {
                    if((parameterTypes[i] != null) && !p[i].equals(parameterTypes[i]))
                    {
                        continue outside1;
                    }
                }
            }
            list.add(c);
        }
        Constructor[] array = list.toArray(new Constructor[0]);
        if(array.length == 0)
        {
            return null;
        }
        if(array.length > 1)
        {
            String msg = "Constructors " + array[0].getName();
            for(int i = 1; i < array.length - 1; i++)
            {
                msg += ", " + getConstructorDescription(array[i]);
            }
            msg += "and " + array[array.length - 1].getName() + " match on class " + _className + ".";
            throw new TooManyMatchesException(msg);
        }
        return array[0];
    }