/** Find property write method or setter for property name. * No need for expensive method name conversion, member is * cached by property name. * @param name of property * @return the property write method or null */ public Invocable findSetter(String propName) { if (hasMember(propName)) for (Invocable property: members(propName)) if (property.isSetter()) return property; return null; }
/** Cache constructors and methods. * Identifies properties and caches an additional cache entry * referenced by property name, as defined by bean specification. * @param member to cache * @return true if the cache changed */ private boolean cacheMember(Invocable member) { if (null == member) return false; if (!member.isGetter() && !member.isSetter()) return cacheMember(member.getName(), member); String name = member.getName(); String propName = name.replaceFirst("[gs]et|is", ""); if (propName.length() == 1 // double caps are skipped || Character.isLowerCase(name.charAt(1))) { char[] ch = propName.toCharArray(); ch[0] = Character.toLowerCase(ch[0]); propName = new String(ch); } return cacheMember(name, member) && cacheMember(propName, member); }