private static void doCollectSynchronizedProperties(Class<?> clazz, Map<String, SynchronizedPropertyInfo> infos) { for (Method method : clazz.getDeclaredMethods()) { Synchronize annotation = method.getAnnotation(Synchronize.class); if (annotation == null) { continue; } if (!ReflectTools.isGetter(method)) { throw new IllegalStateException(method + " is annotated with @" + Synchronize.class.getSimpleName() + " even though it's not a getter."); } if (infos.containsKey(method.getName())) { continue; } String propertyName; if (annotation.property().isEmpty()) { propertyName = ReflectTools.getPropertyName(method); } else { propertyName = annotation.property(); } String[] eventNames = annotation.value(); infos.put(method.getName(), new SynchronizedPropertyInfo( propertyName, eventNames, annotation.allowUpdates())); } }