You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Daniel Dekany (JIRA)" <ji...@apache.org> on 2017/03/26 19:02:41 UTC

[jira] [Closed] (FREEMARKER-24) Support of default methods in object model

     [ https://issues.apache.org/jira/browse/FREEMARKER-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Dekany closed FREEMARKER-24.
-----------------------------------

> Support of default methods in object model
> ------------------------------------------
>
>                 Key: FREEMARKER-24
>                 URL: https://issues.apache.org/jira/browse/FREEMARKER-24
>             Project: Apache Freemarker
>          Issue Type: Improvement
>          Components: engine
>    Affects Versions: 2.3.24-incubating
>            Reporter: Emmanuel Keller
>            Assignee: Daniel Dekany
>            Priority: Minor
>             Fix For: 2.3.26-incubating
>
>
> The default object method model currently does not support default methods:
> https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
> Here is the current error:
> {noformat}
> FTL stack trace ("~" means nesting-related):
> 	- Failed at: #if task.switchable  [in template "...../home.ftl" at line 43, column 25]
> ----
> 	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:131)
> 	at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:77)
> 	at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:40)
> 	at freemarker.core.NonBooleanException.<init>(NonBooleanException.java:44)
> 	at freemarker.core.Expression.modelToBoolean(Expression.java:142)
> 	at freemarker.core.Expression.evalToBoolean(Expression.java:125)
> 	at freemarker.core.Expression.evalToBoolean(Expression.java:110)
> 	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:46)
> 	at freemarker.core.Environment.visit(Environment.java:324)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:54)
> 	at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
> 	at freemarker.core.IteratorBlock$IterationContext.executeNestedBlockInner(IteratorBlock.java:240)
> 	at freemarker.core.IteratorBlock$IterationContext.executeNestedBlock(IteratorBlock.java:220)
> 	at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:194)
> 	at freemarker.core.Environment.visitIteratorBlock(Environment.java:572)
> 	at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:78)
> 	at freemarker.core.IteratorBlock.accept(IteratorBlock.java:64)
> 	at freemarker.core.Environment.visit(Environment.java:324)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:54)
> 	at freemarker.core.Environment.visit(Environment.java:324)
> 	at freemarker.core.Environment.process(Environment.java:302)
> 	at freemarker.template.Template.process(Template.java:325)
> 	at com.qwazr.tools.FreeMarkerTool.template(FreeMarkerTool.java:86)
> 	at com.qwazr.tools.FreeMarkerTool.template(FreeMarkerTool.java:101)
> {noformat}
> To reproduce this.
> 1. Use an interface
> {code:java}
> public interface UpdatableTask extends Runnable {
>     default boolean isSwitchable() {
>         return false;
>     }
> }
> {code}
> 2. Use an object that implements this interface with the following template:
> {code}
> <#if task.switchable>
> ...
> </#if>
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)