code: public synchronized PropertyEditor getEditor(Property property) {
          PropertyEditor editor = null;
          if (property instanceof PropertyDescriptorAdapter) {
              PropertyDescriptor descriptor = ((PropertyDescriptorAdapter) property).getDescriptor();
              if (descriptor != null) {
                  //allow a per/set property editor override
                  PropertyEditorOverride annotation = descriptor.getWriteMethod().getAnnotation(PropertyEditorOverride.class);
                  if (annotation != null) {
                      Class<?> clz = annotation.type();
                      if (clz != null) {
                          editor = loadPropertyEditor(clz);
                      }
                  }
                  if (editor == null) {
                      Class<?> clz = descriptor.getPropertyEditorClass();
                      if (clz != null) {
                          editor = loadPropertyEditor(clz);
                      }
                  }
              }
          }
          if (editor == null) {
              Object value = propertyToEditor.get(property);
              if (value instanceof PropertyEditor) {
                  editor = (PropertyEditor) value;
              } else if (value instanceof Class<?>) {
                  editor = loadPropertyEditor((Class<?>) value);
              } else {
                  editor = getEditor(property.getType());
              }
          }
          if ((editor == null) && (property instanceof PropertyDescriptorAdapter)) {
              PropertyDescriptor descriptor = ((PropertyDescriptorAdapter) property).getDescriptor();
              Class<?> clz = descriptor.getPropertyType();
              editor = PropertyEditorManager.findEditor(clz);
          }
          return editor;
      }
docs: Gets an editor for the given property. The lookup is as follow:
  <ul>
  <li>if propertyDescriptor.getPropertyEditorClass() returns a valid value,
  it is returned, else,
  <li>if an editor was registered with
  {@link #registerEditor(Property, PropertyEditor)}, it is returned,
  else</li>
  <li>if an editor class was registered with
  {@link #registerEditor(Property, Class)}, it is returned, else
  <li>
  <li>look for editor for the property type using
  {@link #getEditor(Class)}.it is returned, else
  </li>
  <li>look for editor using PropertyEditorManager.findEditor(Class);
  </li>
  </ul>
  
  @param property
  @return an editor suitable for the Property.