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

Henri Biestro updated JEXL-197:
-------------------------------
    Description: 
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.


  was:
Another train of thoughts...

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.



> 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