[
https://issues.apache.org/jira/browse/FREEMARKER-183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17748998#comment-17748998
]
Simon edited comment on FREEMARKER-183 at 7/31/23 2:08 AM:
-----------------------------------------------------------
My third attempt fared no better (i.e. works as properties, but not as methods):
{code:java}
private List<PropertyDescriptor> getPropertyDescriptors(BeanInfo beanInfo,
Class<?> clazz) {
PropertyDescriptor[] introspectorPDsArray =
beanInfo.getPropertyDescriptors();
List<PropertyDescriptor> introspectorPDs = introspectorPDsArray != null ?
Arrays.asList(introspectorPDsArray)
: Collections.<PropertyDescriptor>emptyList();
if (isRecordType(clazz)) {
Method[] accessors = RecordAccessor.instance().getAccessors(clazz);
if (accessors.length > 0) {
List<PropertyDescriptor> accessorPDs = new
ArrayList<>(accessors.length + introspectorPDs.size());
for (Method accessor : accessors) {
try {
accessorPDs.add(new PropertyDescriptor(accessor.getName(),
accessor, null));
} catch (IntrospectionException e) {
if (LOG.isWarnEnabled()) {
LOG.warn("Failed creating property descriptor for " +
clazz.getName() + " property " +
accessor.getName(),
e);
}
}
}
accessorPDs.addAll(introspectorPDs);
introspectorPDs = accessorPDs;
}
} {code}
was (Author: JIRAUSER301336):
My third attempt fared no better (i.e. works as properties, but not as methods):
{code:java}
private List<PropertyDescriptor> getPropertyDescriptors(BeanInfo beanInfo,
Class<?> clazz) {
PropertyDescriptor[] introspectorPDsArray =
beanInfo.getPropertyDescriptors();
List<PropertyDescriptor> introspectorPDs = introspectorPDsArray != null ?
Arrays.asList(introspectorPDsArray)
: Collections.<PropertyDescriptor>emptyList();
if (isRecordType(clazz)) {
Method[] accessors = RecordAccessor.instance().getAccessors(clazz);
if (accessors.length > 0) {
List<PropertyDescriptor> accessorPDs = new
ArrayList<>(accessors.length + introspectorPDs.size());
for (Method accessor : accessors) {
try {
accessorPDs.add(new PropertyDescriptor(accessor.getName(),
accessor, null));
} catch (IntrospectionException e) {
if (LOG.isWarnEnabled()) {
LOG.warn("Failed creating property descriptor for " +
clazz.getName() + " property " +
accessor.getName(),
e);
}
}
}
accessorPDs.addAll(introspectorPDs);
introspectorPDs = accessorPDs;
}
} {code}
> Add support for Java records
> ----------------------------
>
> Key: FREEMARKER-183
> URL: https://issues.apache.org/jira/browse/FREEMARKER-183
> Project: Apache Freemarker
> Issue Type: Task
> Reporter: Dániel Dékány
> Assignee: Dániel Dékány
> Priority: Major
>
> Currently we don't support records (JEP 395), which was finalized in Java 16.
> Users can extend {{DefaultObjectWrapper}} for that of course, but it should
> be supported out of the box.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)