c) A portlet must support EDIT mode and it must have public doEdit() method.
By the way, this portlet must not support edit_defaults mode explicitly in its portlet definition. If it defines edit_defaults mode support explicitly, it means it doesn't need "auto-switching".

However, with the above conditions, we cannot support auto-switching to edit_defaults mode correctly if a portlet should not support EDIT mode but it should support edit_defaults mode.
Therefore, I'd like to change the last condition (c) like this:

c) A portlet must have a public render helper method for edit mode.
With Portlet 2.0 GenericPortlet class, the helper method can be an annotated one or the defined method, "doEdit(RenderRequest, RenderResponse)".