[ 
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)

Reply via email to