HashMap (final String className) { if (myCache.containsKey(className)) { return (HashMap)myCache.get(className); } if (Utils.validateJComponentClass(myLoader, className, false) != null) { return null; } final Class aClass; try { aClass = Class.forName(className, false, myLoader); } catch (final ClassNotFoundException exc) { throw new RuntimeException(exc.toString()); // should never happen } final BeanInfo beanInfo; try { beanInfo = Introspector.getBeanInfo(aClass); } catch (Throwable e) { return null; } final HashMap<String, LwIntrospectedProperty> result = new HashMap<>(); final PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); for (final PropertyDescriptor descriptor : descriptors) { final Method readMethod = descriptor.getReadMethod(); final Method writeMethod = descriptor.getWriteMethod(); final Class propertyType = descriptor.getPropertyType(); if (writeMethod == null || readMethod == null || propertyType == null) { continue; } final String name = descriptor.getName(); final LwIntrospectedProperty property = propertyFromClass(propertyType, name); if (property != null) { property.setDeclaringClassName(descriptor.getReadMethod().getDeclaringClass().getName()); result.put(name, property); } } myCache.put(className, result); return result; }