void (@NotNull String prefix, @NotNull Object component, @NotNull List<String> methodNames) { Class<?> clazz0 = component.getClass(); Class<?> clazz = clazz0.isAnonymousClass() ? clazz0.getSuperclass() : clazz0; for (String name : methodNames) { String propertyName = ObjectUtils.notNull(StringUtil.getPropertyName(name), name); Object propertyValue; try { try { //noinspection ConstantConditions propertyValue = ReflectionUtil.findMethod(collectAllMethodsRecursively(clazz), name).invoke(component); } catch (Exception e) { propertyValue = ReflectionUtil.findField(clazz, null, name).get(component); } boolean changed = false; try { final String checkerMethodName = "is" + StringUtil.capitalize(propertyName) + "Set"; if (CHECKERS.contains(checkerMethodName)) { //noinspection ConstantConditions final Object value = ReflectionUtil.findMethod(Arrays.asList(clazz.getMethods()), checkerMethodName).invoke(component); if (value instanceof Boolean) { changed = ((Boolean)value).booleanValue(); } } } catch (Exception ignored) { } myProperties.add(new PropertyBean(prefix + propertyName, propertyValue, changed)); } catch (Exception ignored) { } } }