[ 
https://issues.apache.org/jira/browse/JEXL-197?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15404348#comment-15404348
 ] 

Dmitri Blinov commented on JEXL-197:
------------------------------------

Is it correct behaviour that the following script is parsed correctly
{code}
@lenient x = 1
{code}

while the following script is not parsed 
{code}
@lenient var x = 1
{code}

with error 
{quote}
parsing error in 'var'
{quote}

> Add annotations
> ---------------
>
>                 Key: JEXL-197
>                 URL: https://issues.apache.org/jira/browse/JEXL-197
>             Project: Commons JEXL
>          Issue Type: Improvement
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>             Fix For: 3.1
>
>
> Follow up from JEXL-194...
> As an implementation to the extension of statement executions in JEXL we 
> could introduce the use of annotations to each statement or block in the 
> script, i.e. 
> {code}
> @synchronized(items) {for (x : items) ...}
> {code}
> Each statement block should be allowed to have only one annotation but it 
> would be convenient to allow the syntax 
> {code}
> @silent @lenient {null.tryMe()}
> {code}
> which should be syntaxically equivalent to:
> {code}
> @silent {@lenient {null.tryMe()}}
> {code}
> From the JexlEngine point of view, each annotation could be implemented in 
> the form of Interceptor interface, for example
> {code}
> public interface Interceptor {
>    public Object onExecute(JexlStatement block, String annotation, Object.. 
> args);
> }
> {code}
> The annotation syntax should allow for zero, one or more parameters. Those 
> parameters should be evaluated before interceptor execution and submitted to 
> the Interceptor.onExecute() method via args parameter.
> JexlEngine should be given a method to register annotation interceptor based 
> on annotation name, and the one for default interceptor, which should be 
> called before each statement execution as if @default annotation is declared 
> in each statement in script. 
> {code}
> @silent {@default {...}}
> {code}
> The JexlStatement is the proposed new interface to somehow identify the 
> statement or block of code which may also provide some info about it's stack 
> frame.
> {code}
> public interface JexlStatement {
>    public Object interpret();
>    // ..
> }
> {code}
> The JexlStatement.interpret() method should trigger the execution of the 
> statement block, returning statement's result as its return value.
> In the absence of a matching interceptor corresponding to the annotation 
> name, JexlEngine should simply ignore that, or write some diagnostic message 
> in the log file.
> Such implementation could provide developers with excellent tool to add 
> various checks and enhancements to scripting without pushing for new features 
> that eventually would mess up the basic code. The JEXL-185 issue could also 
> be dropped since tracing could be added easily via interceptors.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to