private static BeanInfo getExplicitBeanInfo(Class<?> beanClass) {
        String beanInfoClassName = beanClass.getName() + "BeanInfo"; //$NON-NLS-1$
        try {
            return loadBeanInfo(beanInfoClassName, beanClass);
        } catch (Exception e) {
            // fall through
        }

        int index = beanInfoClassName.lastIndexOf('.');
        String beanInfoName = index >= 0 ? beanInfoClassName
                .substring(index + 1) : beanInfoClassName;
        BeanInfo theBeanInfo = null;
        BeanDescriptor beanDescriptor = null;
        for (int i = 0; i < searchPath.length; i++) {
            beanInfoClassName = searchPath[i] + "." + beanInfoName; //$NON-NLS-1$
            try {
                theBeanInfo = loadBeanInfo(beanInfoClassName, beanClass);
            } catch (Exception e) {
                // ignore, try next one
                continue;
            }
            beanDescriptor = theBeanInfo.getBeanDescriptor();
            if (beanDescriptor != null
                    && beanClass == beanDescriptor.getBeanClass()) {
                return theBeanInfo;
            }
        }
        if (BeanInfo.class.isAssignableFrom(beanClass)) {
            try {
                return loadBeanInfo(beanClass.getName(), beanClass);
            } catch (Exception e) {
                // fall through
            }
        }
        return null;
    }