[
https://issues.apache.org/jira/browse/SLING-4997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14734059#comment-14734059
]
Stefan Seifert commented on SLING-4997:
---------------------------------------
yes, you're right, the current behavior/signature is not consistent and
probably not useful at all.
btw, it seems to me that the implementation of canCreateFromAdaptable can
report false answers as well: if you pass in a class with @Model anntation that
was not registered to the ModelAdapterFactory (e.g. because package name not
listed in the bundle headers) then it still may return true - because of the
"normally this code path is not executed, because all types are cached in
adapterImplementations - it is still useful for unit testing" code path.
perhaps we should remove this and make sure false is returned in this case?
coming back to isModelClass: what is the main goal of this method (it's not
exactly described in the javadocs)? If it really should only check of the given
class has a model annotation we can remove the adaptable parameter (that means
deprecate this signature and add a new one without adaptable). if one wants to
check in combination with alternate adapters he shoud use
canCreateFromAdaptable instead.
> Inconsistency in ModelFactory.isModelClass()
> --------------------------------------------
>
> Key: SLING-4997
> URL: https://issues.apache.org/jira/browse/SLING-4997
> Project: Sling
> Issue Type: Bug
> Components: Extensions
> Affects Versions: Sling Models API 1.2.0
> Reporter: Konrad Windszus
>
> With the changes in SLING-4056 there was a change on a method in the
> {{ModelFactory}}:
> {{public boolean isModelClass(Class<?> modelClass)}} became
> {{public boolean isModelClass(Object adaptable, Class<?> type)}}
> The adaptable parameter was necessary because of the alternate adapter
> classes defined in
> https://sling.apache.org/documentation/bundles/models.html#specifying-an-alternate-adapter-class-since-sling-models-110.
> If you now have a Model defined like this
> {code}
> @Model(adaptables = Resource.class)
> public class MyModel
> {code}
> a call of {{ModelFactory.isModelClass(<some SlingHttpServletRequest>,
> MyModel.class)}} returns {{true}}, although the model class is only defined
> on the adaptable {{Resource}}.
> On the other hand if you define a model like this
> {code}
> @Model(adapters=MyModel, adaptables = Resource.class)
> public class MyModelImpl implements MyModel
> {code}
> a call of {{ModelFactory.isModelClass(<some SlingHttpServletRequest>,
> MyModel.class)}} returns {{false}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)