Modified:
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-frame.html
==============================================================================
---
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-frame.html
(original)
+++
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-frame.html
Fri Jun 25 11:11:58 2021
@@ -4,7 +4,7 @@
<!-- generated by Apache Maven JXR (jdk8) -->
<head>
<meta http-equiv="content-type" content="text/html;
charset=iso-8859-1" />
- <title>Apache Commons JEXL 3.2.1-SNAPSHOT Reference Package
org.apache.commons.jexl3.annotations</title>
+ <title>Apache Commons JEXL 3.2.1 Reference Package
org.apache.commons.jexl3.annotations</title>
<link rel="stylesheet" type="text/css"
href="../../../../../stylesheet.css" title="style" />
</head>
<body>
Modified:
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-summary.html
==============================================================================
---
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-summary.html
(original)
+++
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/annotations/package-summary.html
Fri Jun 25 11:11:58 2021
@@ -4,7 +4,7 @@
<!-- generated by Apache Maven JXR (jdk8) -->
<head>
<meta http-equiv="content-type" content="text/html;
charset=iso-8859-1" />
- <title>Apache Commons JEXL 3.2.1-SNAPSHOT Reference Package
org.apache.commons.jexl3.annotations</title>
+ <title>Apache Commons JEXL 3.2.1 Reference Package
org.apache.commons.jexl3.annotations</title>
<link rel="stylesheet" type="text/css"
href="../../../../../stylesheet.css" title="style" />
</head>
@@ -23,7 +23,7 @@
<li>Index</li>
<li>Help</li>
</ul>
- <div class="aboutLanguage"><em><strong>Apache Commons JEXL
3.2.1-SNAPSHOT Reference</strong></em></div>
+ <div class="aboutLanguage"><em><strong>Apache Commons JEXL 3.2.1
Reference</strong></em></div>
</div>
<div class="subNav">
<ul class="navList">
@@ -76,7 +76,7 @@
<li>Index</li>
<li>Help</li>
</ul>
- <div class="aboutLanguage"><em><strong>Apache Commons JEXL
3.2.1-SNAPSHOT Reference</strong></em></div>
+ <div class="aboutLanguage"><em><strong>Apache Commons JEXL 3.2.1
Reference</strong></em></div>
</div>
<div class="subNav">
<ul class="navList">
Modified:
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/internal/Interpreter.html
==============================================================================
---
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/internal/Interpreter.html
(original)
+++
websites/production/commons/content/proper/commons-jexl/xref/org/apache/commons/jexl3/internal/Interpreter.html
Fri Jun 25 11:11:58 2021
@@ -1691,245 +1691,247 @@
<a class="jxr_linenumber" name="L1683" href="#L1683">1683</a>
narrow = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L1684" href="#L1684">1684</a>
<em class="jxr_comment">// continue;</em>
<a class="jxr_linenumber" name="L1685" href="#L1685">1685</a> }
-<a class="jxr_linenumber" name="L1686" href="#L1686">1686</a> <em
class="jxr_comment">// we have either evaluated and returned or no method was
found</em>
-<a class="jxr_linenumber" name="L1687" href="#L1687">1687</a>
<strong class="jxr_keyword">return</strong> node.isSafeLhs(isSafe())
-<a class="jxr_linenumber" name="L1688" href="#L1688">1688</a>
? <strong class="jxr_keyword">null</strong>
-<a class="jxr_linenumber" name="L1689" href="#L1689">1689</a>
: unsolvableMethod(node, methodName, argv);
-<a class="jxr_linenumber" name="L1690" href="#L1690">1690</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> JexlException.TryFailed xany) {
-<a class="jxr_linenumber" name="L1691" href="#L1691">1691</a>
<strong class="jxr_keyword">throw</strong> invocationException(node,
methodName, xany);
-<a class="jxr_linenumber" name="L1692" href="#L1692">1692</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>
xthru) {
-<a class="jxr_linenumber" name="L1693" href="#L1693">1693</a>
<strong class="jxr_keyword">throw</strong> xthru;
-<a class="jxr_linenumber" name="L1694" href="#L1694">1694</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
-<a class="jxr_linenumber" name="L1695" href="#L1695">1695</a>
<strong class="jxr_keyword">throw</strong> invocationException(node,
methodName, xany);
-<a class="jxr_linenumber" name="L1696" href="#L1696">1696</a> }
-<a class="jxr_linenumber" name="L1697" href="#L1697">1697</a> }
-<a class="jxr_linenumber" name="L1698" href="#L1698">1698</a>
-<a class="jxr_linenumber" name="L1699" href="#L1699">1699</a> @Override
-<a class="jxr_linenumber" name="L1700" href="#L1700">1700</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> ASTConstructorNode node, <strong
class="jxr_keyword">final</strong> Object data) {
-<a class="jxr_linenumber" name="L1701" href="#L1701">1701</a> <strong
class="jxr_keyword">if</strong> (isCancelled()) {
-<a class="jxr_linenumber" name="L1702" href="#L1702">1702</a>
<strong class="jxr_keyword">throw</strong> <strong
class="jxr_keyword">new</strong> JexlException.Cancel(node);
-<a class="jxr_linenumber" name="L1703" href="#L1703">1703</a> }
-<a class="jxr_linenumber" name="L1704" href="#L1704">1704</a> <em
class="jxr_comment">// first child is class or class name</em>
-<a class="jxr_linenumber" name="L1705" href="#L1705">1705</a> <strong
class="jxr_keyword">final</strong> Object target =
node.jjtGetChild(0).jjtAccept(<strong class="jxr_keyword">this</strong>, data);
-<a class="jxr_linenumber" name="L1706" href="#L1706">1706</a> <em
class="jxr_comment">// get the ctor args</em>
-<a class="jxr_linenumber" name="L1707" href="#L1707">1707</a> <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
argc = node.jjtGetNumChildren() - 1;
-<a class="jxr_linenumber" name="L1708" href="#L1708">1708</a> Object[]
argv = <strong class="jxr_keyword">new</strong> Object[argc];
-<a class="jxr_linenumber" name="L1709" href="#L1709">1709</a> <strong
class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i =
0; i < argc; i++) {
-<a class="jxr_linenumber" name="L1710" href="#L1710">1710</a>
argv[i] = node.jjtGetChild(i + 1).jjtAccept(<strong
class="jxr_keyword">this</strong>, data);
-<a class="jxr_linenumber" name="L1711" href="#L1711">1711</a> }
-<a class="jxr_linenumber" name="L1712" href="#L1712">1712</a>
-<a class="jxr_linenumber" name="L1713" href="#L1713">1713</a> <strong
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L1714" href="#L1714">1714</a>
<strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">boolean</strong> cacheable = cache;
-<a class="jxr_linenumber" name="L1715" href="#L1715">1715</a> <em
class="jxr_comment">// attempt to reuse last funcall cached in volatile
JexlNode.value</em>
-<a class="jxr_linenumber" name="L1716" href="#L1716">1716</a>
<strong class="jxr_keyword">if</strong> (cacheable) {
-<a class="jxr_linenumber" name="L1717" href="#L1717">1717</a>
<strong class="jxr_keyword">final</strong> Object cached = node.jjtGetValue();
-<a class="jxr_linenumber" name="L1718" href="#L1718">1718</a>
<strong class="jxr_keyword">if</strong> (cached instanceof Funcall) {
-<a class="jxr_linenumber" name="L1719" href="#L1719">1719</a>
<strong class="jxr_keyword">final</strong> Object eval = ((Funcall)
cached).tryInvoke(<strong class="jxr_keyword">this</strong>, <strong
class="jxr_keyword">null</strong>, target, argv);
-<a class="jxr_linenumber" name="L1720" href="#L1720">1720</a>
<strong class="jxr_keyword">if</strong> (JexlEngine.TRY_FAILED != eval) {
-<a class="jxr_linenumber" name="L1721" href="#L1721">1721</a>
<strong class="jxr_keyword">return</strong> eval;
-<a class="jxr_linenumber" name="L1722" href="#L1722">1722</a>
}
-<a class="jxr_linenumber" name="L1723" href="#L1723">1723</a> }
-<a class="jxr_linenumber" name="L1724" href="#L1724">1724</a> }
-<a class="jxr_linenumber" name="L1725" href="#L1725">1725</a>
<strong class="jxr_keyword">boolean</strong> narrow = false;
-<a class="jxr_linenumber" name="L1726" href="#L1726">1726</a> <a
name="JexlMethod"
href="../../../../../org/apache/commons/jexl3/introspection/JexlMethod.html#JexlMethod">JexlMethod</a>
ctor = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1727" href="#L1727">1727</a>
Funcall funcall = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1728" href="#L1728">1728</a>
<strong class="jxr_keyword">while</strong> (<strong
class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="L1729" href="#L1729">1729</a>
<em class="jxr_comment">// try as stated</em>
-<a class="jxr_linenumber" name="L1730" href="#L1730">1730</a>
ctor = uberspect.getConstructor(target, argv);
-<a class="jxr_linenumber" name="L1731" href="#L1731">1731</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1732" href="#L1732">1732</a>
<strong class="jxr_keyword">if</strong> (cacheable &&
ctor.isCacheable()) {
-<a class="jxr_linenumber" name="L1733" href="#L1733">1733</a>
funcall = <strong class="jxr_keyword">new</strong> Funcall(ctor, narrow);
-<a class="jxr_linenumber" name="L1734" href="#L1734">1734</a>
}
-<a class="jxr_linenumber" name="L1735" href="#L1735">1735</a>
<strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="L1736" href="#L1736">1736</a> }
-<a class="jxr_linenumber" name="L1737" href="#L1737">1737</a>
<em class="jxr_comment">// try with prepending context as first argument</em>
-<a class="jxr_linenumber" name="L1738" href="#L1738">1738</a>
<strong class="jxr_keyword">final</strong> Object[] nargv =
callArguments(context, narrow, argv);
-<a class="jxr_linenumber" name="L1739" href="#L1739">1739</a>
ctor = uberspect.getConstructor(target, nargv);
-<a class="jxr_linenumber" name="L1740" href="#L1740">1740</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1741" href="#L1741">1741</a>
<strong class="jxr_keyword">if</strong> (cacheable &&
ctor.isCacheable()) {
-<a class="jxr_linenumber" name="L1742" href="#L1742">1742</a>
funcall = <strong class="jxr_keyword">new</strong> ContextualCtor(ctor,
narrow);
-<a class="jxr_linenumber" name="L1743" href="#L1743">1743</a>
}
-<a class="jxr_linenumber" name="L1744" href="#L1744">1744</a>
argv = nargv;
-<a class="jxr_linenumber" name="L1745" href="#L1745">1745</a>
<strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="L1746" href="#L1746">1746</a> }
-<a class="jxr_linenumber" name="L1747" href="#L1747">1747</a>
<em class="jxr_comment">// if we did not find an exact method by name and we
haven't tried yet,</em>
-<a class="jxr_linenumber" name="L1748" href="#L1748">1748</a>
<em class="jxr_comment">// attempt to narrow the parameters and if this
succeeds, try again in next loop</em>
-<a class="jxr_linenumber" name="L1749" href="#L1749">1749</a>
<strong class="jxr_keyword">if</strong> (!narrow &&
arithmetic.narrowArguments(argv)) {
-<a class="jxr_linenumber" name="L1750" href="#L1750">1750</a>
narrow = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L1751" href="#L1751">1751</a>
<strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="L1752" href="#L1752">1752</a> }
-<a class="jxr_linenumber" name="L1753" href="#L1753">1753</a>
<em class="jxr_comment">// we are done trying</em>
-<a class="jxr_linenumber" name="L1754" href="#L1754">1754</a>
<strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="L1755" href="#L1755">1755</a> }
-<a class="jxr_linenumber" name="L1756" href="#L1756">1756</a> <em
class="jxr_comment">// we have either evaluated and returned or might have
found a ctor</em>
-<a class="jxr_linenumber" name="L1757" href="#L1757">1757</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1758" href="#L1758">1758</a>
<strong class="jxr_keyword">final</strong> Object eval = ctor.invoke(target,
argv);
-<a class="jxr_linenumber" name="L1759" href="#L1759">1759</a>
<em class="jxr_comment">// cache executor in volatile JexlNode.value</em>
-<a class="jxr_linenumber" name="L1760" href="#L1760">1760</a>
<strong class="jxr_keyword">if</strong> (funcall != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1761" href="#L1761">1761</a>
node.jjtSetValue(funcall);
-<a class="jxr_linenumber" name="L1762" href="#L1762">1762</a> }
-<a class="jxr_linenumber" name="L1763" href="#L1763">1763</a>
<strong class="jxr_keyword">return</strong> eval;
-<a class="jxr_linenumber" name="L1764" href="#L1764">1764</a> }
-<a class="jxr_linenumber" name="L1765" href="#L1765">1765</a>
<strong class="jxr_keyword">final</strong> String tstr = target != <strong
class="jxr_keyword">null</strong> ? target.toString() : <span
class="jxr_string">"?"</span>;
-<a class="jxr_linenumber" name="L1766" href="#L1766">1766</a>
<strong class="jxr_keyword">return</strong> unsolvableMethod(node, tstr, argv);
-<a class="jxr_linenumber" name="L1767" href="#L1767">1767</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> JexlException.Method xmethod) {
-<a class="jxr_linenumber" name="L1768" href="#L1768">1768</a>
<strong class="jxr_keyword">throw</strong> xmethod;
-<a class="jxr_linenumber" name="L1769" href="#L1769">1769</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
-<a class="jxr_linenumber" name="L1770" href="#L1770">1770</a>
<strong class="jxr_keyword">final</strong> String tstr = target != <strong
class="jxr_keyword">null</strong> ? target.toString() : <span
class="jxr_string">"?"</span>;
-<a class="jxr_linenumber" name="L1771" href="#L1771">1771</a>
<strong class="jxr_keyword">throw</strong> invocationException(node, tstr,
xany);
-<a class="jxr_linenumber" name="L1772" href="#L1772">1772</a> }
-<a class="jxr_linenumber" name="L1773" href="#L1773">1773</a> }
-<a class="jxr_linenumber" name="L1774" href="#L1774">1774</a>
-<a class="jxr_linenumber" name="L1775" href="#L1775">1775</a> @Override
-<a class="jxr_linenumber" name="L1776" href="#L1776">1776</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> <a name="ASTJxltLiteral"
href="../../../../../org/apache/commons/jexl3/parser/ASTJxltLiteral.html#ASTJxltLiteral">ASTJxltLiteral</a>
node, <strong class="jxr_keyword">final</strong> Object data) {
-<a class="jxr_linenumber" name="L1777" href="#L1777">1777</a>
TemplateEngine.TemplateExpression tp = (TemplateEngine.TemplateExpression)
node.jjtGetValue();
-<a class="jxr_linenumber" name="L1778" href="#L1778">1778</a> <strong
class="jxr_keyword">if</strong> (tp == <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1779" href="#L1779">1779</a>
<strong class="jxr_keyword">final</strong> <a name="TemplateEngine"
href="../../../../../org/apache/commons/jexl3/internal/TemplateEngine.html#TemplateEngine">TemplateEngine</a>
jxlt = jexl.jxlt();
-<a class="jxr_linenumber" name="L1780" href="#L1780">1780</a> <a
name="JexlInfo"
href="../../../../../org/apache/commons/jexl3/JexlInfo.html#JexlInfo">JexlInfo</a>
info = node.jexlInfo();
-<a class="jxr_linenumber" name="L1781" href="#L1781">1781</a>
<strong class="jxr_keyword">if</strong> (<strong
class="jxr_keyword">this</strong>.block != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1782" href="#L1782">1782</a>
info = <strong class="jxr_keyword">new</strong> JexlNode.Info(node, info);
-<a class="jxr_linenumber" name="L1783" href="#L1783">1783</a> }
-<a class="jxr_linenumber" name="L1784" href="#L1784">1784</a> tp =
jxlt.parseExpression(info, node.getLiteral(), frame != <strong
class="jxr_keyword">null</strong> ? frame.getScope() : <strong
class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L1785" href="#L1785">1785</a>
node.jjtSetValue(tp);
-<a class="jxr_linenumber" name="L1786" href="#L1786">1786</a> }
-<a class="jxr_linenumber" name="L1787" href="#L1787">1787</a> <strong
class="jxr_keyword">if</strong> (tp != <strong
class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="L1788" href="#L1788">1788</a>
<strong class="jxr_keyword">return</strong> tp.evaluate(frame, context);
-<a class="jxr_linenumber" name="L1789" href="#L1789">1789</a> }
-<a class="jxr_linenumber" name="L1790" href="#L1790">1790</a> <strong
class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1791" href="#L1791">1791</a> }
-<a class="jxr_linenumber" name="L1792" href="#L1792">1792</a>
-<a class="jxr_linenumber" name="L1793" href="#L1793">1793</a> @Override
-<a class="jxr_linenumber" name="L1794" href="#L1794">1794</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> <a name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>
node, <strong class="jxr_keyword">final</strong> Object data) {
-<a class="jxr_linenumber" name="L1795" href="#L1795">1795</a> <strong
class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong>
UnsupportedOperationException(ASTAnnotation.<strong
class="jxr_keyword">class</strong>.getName() + <span class="jxr_string">": Not
supported."</span>);
-<a class="jxr_linenumber" name="L1796" href="#L1796">1796</a> }
-<a class="jxr_linenumber" name="L1797" href="#L1797">1797</a>
-<a class="jxr_linenumber" name="L1798" href="#L1798">1798</a> @Override
-<a class="jxr_linenumber" name="L1799" href="#L1799">1799</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> ASTAnnotatedStatement node, <strong
class="jxr_keyword">final</strong> Object data) {
-<a class="jxr_linenumber" name="L1800" href="#L1800">1800</a> <strong
class="jxr_keyword">return</strong> processAnnotation(node, 0, data);
-<a class="jxr_linenumber" name="L1801" href="#L1801">1801</a> }
-<a class="jxr_linenumber" name="L1802" href="#L1802">1802</a>
-<a class="jxr_linenumber" name="L1803" href="#L1803">1803</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1804" href="#L1804">1804</a> <em
class="jxr_javadoccomment"> * An annotated call.</em>
-<a class="jxr_linenumber" name="L1805" href="#L1805">1805</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1806" href="#L1806">1806</a> <strong
class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong>
AnnotatedCall <strong class="jxr_keyword">implements</strong>
Callable<Object> {
-<a class="jxr_linenumber" name="L1807" href="#L1807">1807</a> <em
class="jxr_javadoccomment">/** The statement. */</em>
-<a class="jxr_linenumber" name="L1808" href="#L1808">1808</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
ASTAnnotatedStatement stmt;
-<a class="jxr_linenumber" name="L1809" href="#L1809">1809</a> <em
class="jxr_javadoccomment">/** The child index. */</em>
-<a class="jxr_linenumber" name="L1810" href="#L1810">1810</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
<strong class="jxr_keyword">int</strong> index;
-<a class="jxr_linenumber" name="L1811" href="#L1811">1811</a> <em
class="jxr_javadoccomment">/** The data. */</em>
-<a class="jxr_linenumber" name="L1812" href="#L1812">1812</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
Object data;
-<a class="jxr_linenumber" name="L1813" href="#L1813">1813</a> <em
class="jxr_javadoccomment">/** Tracking whether we processed the annotation.
*/</em>
-<a class="jxr_linenumber" name="L1814" href="#L1814">1814</a> <strong
class="jxr_keyword">private</strong> <strong
class="jxr_keyword">boolean</strong> processed = false;
-<a class="jxr_linenumber" name="L1815" href="#L1815">1815</a>
-<a class="jxr_linenumber" name="L1816" href="#L1816">1816</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1817" href="#L1817">1817</a> <em
class="jxr_javadoccomment"> * Simple ctor.</em>
-<a class="jxr_linenumber" name="L1818" href="#L1818">1818</a> <em
class="jxr_javadoccomment"> * @param astmt the statement</em>
-<a class="jxr_linenumber" name="L1819" href="#L1819">1819</a> <em
class="jxr_javadoccomment"> * @param aindex the index</em>
-<a class="jxr_linenumber" name="L1820" href="#L1820">1820</a> <em
class="jxr_javadoccomment"> * @param adata the data</em>
-<a class="jxr_linenumber" name="L1821" href="#L1821">1821</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1822" href="#L1822">1822</a>
AnnotatedCall(<strong class="jxr_keyword">final</strong> ASTAnnotatedStatement
astmt, <strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">int</strong> aindex, <strong
class="jxr_keyword">final</strong> Object adata) {
-<a class="jxr_linenumber" name="L1823" href="#L1823">1823</a> stmt
= astmt;
-<a class="jxr_linenumber" name="L1824" href="#L1824">1824</a>
index = aindex;
-<a class="jxr_linenumber" name="L1825" href="#L1825">1825</a> data
= adata;
-<a class="jxr_linenumber" name="L1826" href="#L1826">1826</a> }
-<a class="jxr_linenumber" name="L1827" href="#L1827">1827</a>
-<a class="jxr_linenumber" name="L1828" href="#L1828">1828</a>
-<a class="jxr_linenumber" name="L1829" href="#L1829">1829</a> @Override
-<a class="jxr_linenumber" name="L1830" href="#L1830">1830</a> <strong
class="jxr_keyword">public</strong> Object call() <strong
class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="L1831" href="#L1831">1831</a>
processed = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L1832" href="#L1832">1832</a>
<strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L1833" href="#L1833">1833</a>
<strong class="jxr_keyword">return</strong> processAnnotation(stmt, index,
data);
-<a class="jxr_linenumber" name="L1834" href="#L1834">1834</a> }
<strong class="jxr_keyword">catch</strong> (JexlException.Return |
JexlException.Break | JexlException.Continue xreturn) {
-<a class="jxr_linenumber" name="L1835" href="#L1835">1835</a>
<strong class="jxr_keyword">return</strong> xreturn;
-<a class="jxr_linenumber" name="L1836" href="#L1836">1836</a> }
-<a class="jxr_linenumber" name="L1837" href="#L1837">1837</a> }
-<a class="jxr_linenumber" name="L1838" href="#L1838">1838</a>
-<a class="jxr_linenumber" name="L1839" href="#L1839">1839</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1840" href="#L1840">1840</a> <em
class="jxr_javadoccomment"> * @return whether the statement has been
processed</em>
-<a class="jxr_linenumber" name="L1841" href="#L1841">1841</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1842" href="#L1842">1842</a> <strong
class="jxr_keyword">public</strong> <strong
class="jxr_keyword">boolean</strong> isProcessed() {
-<a class="jxr_linenumber" name="L1843" href="#L1843">1843</a>
<strong class="jxr_keyword">return</strong> processed;
-<a class="jxr_linenumber" name="L1844" href="#L1844">1844</a> }
-<a class="jxr_linenumber" name="L1845" href="#L1845">1845</a>
-<a class="jxr_linenumber" name="L1846" href="#L1846">1846</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1847" href="#L1847">1847</a> <em
class="jxr_javadoccomment"> * @return the actual statement.</em>
-<a class="jxr_linenumber" name="L1848" href="#L1848">1848</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1849" href="#L1849">1849</a> <strong
class="jxr_keyword">public</strong> Object getStatement() {
-<a class="jxr_linenumber" name="L1850" href="#L1850">1850</a>
<strong class="jxr_keyword">return</strong> stmt;
-<a class="jxr_linenumber" name="L1851" href="#L1851">1851</a> }
-<a class="jxr_linenumber" name="L1852" href="#L1852">1852</a> }
-<a class="jxr_linenumber" name="L1853" href="#L1853">1853</a>
-<a class="jxr_linenumber" name="L1854" href="#L1854">1854</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1855" href="#L1855">1855</a> <em
class="jxr_javadoccomment"> * Processes an annotated statement.</em>
-<a class="jxr_linenumber" name="L1856" href="#L1856">1856</a> <em
class="jxr_javadoccomment"> * @param stmt the statement</em>
-<a class="jxr_linenumber" name="L1857" href="#L1857">1857</a> <em
class="jxr_javadoccomment"> * @param index the index of the current
annotation being processed</em>
-<a class="jxr_linenumber" name="L1858" href="#L1858">1858</a> <em
class="jxr_javadoccomment"> * @param data the contextual data</em>
-<a class="jxr_linenumber" name="L1859" href="#L1859">1859</a> <em
class="jxr_javadoccomment"> * @return the result of the statement block
evaluation</em>
-<a class="jxr_linenumber" name="L1860" href="#L1860">1860</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1861" href="#L1861">1861</a> <strong
class="jxr_keyword">protected</strong> Object processAnnotation(<strong
class="jxr_keyword">final</strong> ASTAnnotatedStatement stmt, <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
index, <strong class="jxr_keyword">final</strong> Object data) {
-<a class="jxr_linenumber" name="L1862" href="#L1862">1862</a> <em
class="jxr_comment">// are we evaluating the block ?</em>
-<a class="jxr_linenumber" name="L1863" href="#L1863">1863</a> <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
last = stmt.jjtGetNumChildren() - 1;
-<a class="jxr_linenumber" name="L1864" href="#L1864">1864</a> <strong
class="jxr_keyword">if</strong> (index == last) {
-<a class="jxr_linenumber" name="L1865" href="#L1865">1865</a>
<strong class="jxr_keyword">final</strong> <a name="JexlNode"
href="../../../../../org/apache/commons/jexl3/parser/JexlNode.html#JexlNode">JexlNode</a>
cblock = stmt.jjtGetChild(last);
-<a class="jxr_linenumber" name="L1866" href="#L1866">1866</a> <em
class="jxr_comment">// if the context has changed, might need a new
interpreter</em>
-<a class="jxr_linenumber" name="L1867" href="#L1867">1867</a>
<strong class="jxr_keyword">final</strong> <a name="JexlArithmetic"
href="../../../../../org/apache/commons/jexl3/JexlArithmetic.html#JexlArithmetic">JexlArithmetic</a>
jexla = arithmetic.options(context);
-<a class="jxr_linenumber" name="L1868" href="#L1868">1868</a>
<strong class="jxr_keyword">if</strong> (jexla == arithmetic) {
-<a class="jxr_linenumber" name="L1869" href="#L1869">1869</a>
<strong class="jxr_keyword">return</strong>
cblock.jjtAccept(Interpreter.<strong class="jxr_keyword">this</strong>, data);
-<a class="jxr_linenumber" name="L1870" href="#L1870">1870</a> }
-<a class="jxr_linenumber" name="L1871" href="#L1871">1871</a>
<strong class="jxr_keyword">if</strong>
(!arithmetic.getClass().equals(jexla.getClass())) {
-<a class="jxr_linenumber" name="L1872" href="#L1872">1872</a>
logger.warn(<span class="jxr_string">"expected arithmetic to be "</span> +
arithmetic.getClass().getSimpleName()
-<a class="jxr_linenumber" name="L1873" href="#L1873">1873</a>
+ <span class="jxr_string">", got "</span> +
jexla.getClass().getSimpleName()
-<a class="jxr_linenumber" name="L1874" href="#L1874">1874</a>
);
-<a class="jxr_linenumber" name="L1875" href="#L1875">1875</a> }
-<a class="jxr_linenumber" name="L1876" href="#L1876">1876</a>
<strong class="jxr_keyword">final</strong> <a name="Interpreter"
href="../../../../../org/apache/comm<a name="Interpreter"
href="../../../../../org/apache/commons/jexl3/internal/Interpreter.html#Interpreter">Interpreter</a>nternal/Interpreter.html#Interpreter">Interpreter</a>
ii = <strong class="jxr_keyword">new</strong> <a name="Interpreter"
href="../../../../../org/apache/commons/jexl3/internal/Interpreter.html#Interpreter">Interpreter</a>(Interpreter.<strong
class="jxr_keyword">this</strong>, jexla);
-<a class="jxr_linenumber" name="L1877" href="#L1877">1877</a>
<strong class="jxr_keyword">final</strong> Object r = cblock.jjtAccept(ii,
data);
-<a class="jxr_linenumber" name="L1878" href="#L1878">1878</a>
<strong class="jxr_keyword">if</strong> (ii.isCancelled()) {
-<a class="jxr_linenumber" name="L1879" href="#L1879">1879</a>
Interpreter.<strong class="jxr_keyword">this</strong>.cancel();
-<a class="jxr_linenumber" name="L1880" href="#L1880">1880</a> }
-<a class="jxr_linenumber" name="L1881" href="#L1881">1881</a>
<strong class="jxr_keyword">return</strong> r;
-<a class="jxr_linenumber" name="L1882" href="#L1882">1882</a> }
-<a class="jxr_linenumber" name="L1883" href="#L1883">1883</a> <em
class="jxr_comment">// tracking whether we processed the annotation</em>
-<a class="jxr_linenumber" name="L1884" href="#L1884">1884</a> <strong
class="jxr_keyword">final</strong> AnnotatedCall jstmt = <strong
class="jxr_keyword">new</strong> AnnotatedCall(stmt, index + 1, data);
-<a class="jxr_linenumber" name="L1885" href="#L1885">1885</a> <em
class="jxr_comment">// the annotation node and name</em>
-<a class="jxr_linenumber" name="L1886" href="#L1886">1886</a> <strong
class="jxr_keyword">final</strong> <a name="ASTAnnotation"<a
name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>
anode = (<a name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>)
stmt.jjtGetChild(index);
-<a class="jxr_linenumber" name="L1887" href="#L1887">1887</a> <strong
class="jxr_keyword">final</strong> String aname = anode.getName();
-<a class="jxr_linenumber" name="L1888" href="#L1888">1888</a> <em
class="jxr_comment">// evaluate the arguments</em>
-<a class="jxr_linenumber" name="L1889" href="#L1889">1889</a> <strong
class="jxr_keyword">final</strong> Object[] argv = anode.jjtGetNumChildren()
> 0
-<a class="jxr_linenumber" name="L1890" href="#L1890">1890</a>
? visit((ASTArguments) anode.jjtGetChild(0), <strong
class="jxr_keyword">null</strong>) : <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1891" href="#L1891">1891</a> <em
class="jxr_comment">// wrap the future, will recurse through annotation
processor</em>
-<a class="jxr_linenumber" name="L1892" href="#L1892">1892</a> Object
result;
-<a class="jxr_linenumber" name="L1893" href="#L1893">1893</a> <strong
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L1894" href="#L1894">1894</a>
result = processAnnotation(aname, argv, jstmt);
-<a class="jxr_linenumber" name="L1895" href="#L1895">1895</a> <em
class="jxr_comment">// not processing an annotation is an error</em>
-<a class="jxr_linenumber" name="L1896" href="#L1896">1896</a>
<strong class="jxr_keyword">if</strong> (!jstmt.isProcessed()) {
-<a class="jxr_linenumber" name="L1897" href="#L1897">1897</a>
<strong class="jxr_keyword">return</strong> annotationError(anode, aname,
<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L1898" href="#L1898">1898</a> }
-<a class="jxr_linenumber" name="L1899" href="#L1899">1899</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>
xany) {
-<a class="jxr_linenumber" name="L1900" href="#L1900">1900</a>
<strong class="jxr_keyword">throw</strong> xany;
-<a class="jxr_linenumber" name="L1901" href="#L1901">1901</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
-<a class="jxr_linenumber" name="L1902" href="#L1902">1902</a>
<strong class="jxr_keyword">return</strong> annotationError(anode, aname, xany);
-<a class="jxr_linenumber" name="L1903" href="#L1903">1903</a> }
-<a class="jxr_linenumber" name="L1904" href="#L1904">1904</a> <em
class="jxr_comment">// the caller may return a return, break or continue</em>
-<a class="jxr_linenumber" name="L1905" href="#L1905">1905</a> <strong
class="jxr_keyword">if</strong> (result instanceof <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>)
{
-<a class="jxr_linenumber" name="L1906" href="#L1906">1906</a>
<strong class="jxr_keyword">throw</strong> (<a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>)
result;
-<a class="jxr_linenumber" name="L1907" href="#L1907">1907</a> }
-<a class="jxr_linenumber" name="L1908" href="#L1908">1908</a> <strong
class="jxr_keyword">return</strong> result;
-<a class="jxr_linenumber" name="L1909" href="#L1909">1909</a> }
-<a class="jxr_linenumber" name="L1910" href="#L1910">1910</a>
-<a class="jxr_linenumber" name="L1911" href="#L1911">1911</a> <em
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1912" href="#L1912">1912</a> <em
class="jxr_javadoccomment"> * Delegates the annotation processing to the
JexlContext if it is an AnnotationProcessor.</em>
-<a class="jxr_linenumber" name="L1913" href="#L1913">1913</a> <em
class="jxr_javadoccomment"> * @param annotation the annotation name</em>
-<a class="jxr_linenumber" name="L1914" href="#L1914">1914</a> <em
class="jxr_javadoccomment"> * @param args the annotation
arguments</em>
-<a class="jxr_linenumber" name="L1915" href="#L1915">1915</a> <em
class="jxr_javadoccomment"> * @param stmt the statement / block
that was annotated</em>
-<a class="jxr_linenumber" name="L1916" href="#L1916">1916</a> <em
class="jxr_javadoccomment"> * @return the result of statement.call()</em>
-<a class="jxr_linenumber" name="L1917" href="#L1917">1917</a> <em
class="jxr_javadoccomment"> * @throws Exception if anything goes wrong</em>
-<a class="jxr_linenumber" name="L1918" href="#L1918">1918</a> <em
class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1919" href="#L1919">1919</a> <strong
class="jxr_keyword">protected</strong> Object processAnnotation(<strong
class="jxr_keyword">final</strong> String annotation, <strong
class="jxr_keyword">final</strong> Object[] args, <strong
class="jxr_keyword">final</strong> Callable<Object> stmt) <strong
class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="L1920" href="#L1920">1920</a>
<strong class="jxr_keyword">return</strong> context instanceof
JexlContext.AnnotationProcessor
-<a class="jxr_linenumber" name="L1921" href="#L1921">1921</a>
? ((JexlContext.AnnotationProcessor) context).processAnnotation(annotation,
args, stmt)
-<a class="jxr_linenumber" name="L1922" href="#L1922">1922</a>
: stmt.call();
-<a class="jxr_linenumber" name="L1923" href="#L1923">1923</a> }
-<a class="jxr_linenumber" name="L1924" href="#L1924">1924</a> }
+<a class="jxr_linenumber" name="L1686" href="#L1686">1686</a> }
<strong class="jxr_keyword">catch</strong> (JexlException.Method xmethod) {
+<a class="jxr_linenumber" name="L1687" href="#L1687">1687</a> <em
class="jxr_comment">// ignore and handle at end; treat as an inner discover
that fails</em>
+<a class="jxr_linenumber" name="L1688" href="#L1688">1688</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> JexlException.TryFailed xany) {
+<a class="jxr_linenumber" name="L1689" href="#L1689">1689</a>
<strong class="jxr_keyword">throw</strong> invocationException(node,
methodName, xany);
+<a class="jxr_linenumber" name="L1690" href="#L1690">1690</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>
xthru) {
+<a class="jxr_linenumber" name="L1691" href="#L1691">1691</a>
<strong class="jxr_keyword">throw</strong> xthru;
+<a class="jxr_linenumber" name="L1692" href="#L1692">1692</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
+<a class="jxr_linenumber" name="L1693" href="#L1693">1693</a>
<strong class="jxr_keyword">throw</strong> invocationException(node,
methodName, xany);
+<a class="jxr_linenumber" name="L1694" href="#L1694">1694</a> }
+<a class="jxr_linenumber" name="L1695" href="#L1695">1695</a> <em
class="jxr_comment">// we have either evaluated and returned or no method was
found</em>
+<a class="jxr_linenumber" name="L1696" href="#L1696">1696</a> <strong
class="jxr_keyword">return</strong> node.isSafeLhs(isSafe())
+<a class="jxr_linenumber" name="L1697" href="#L1697">1697</a>
? <strong class="jxr_keyword">null</strong>
+<a class="jxr_linenumber" name="L1698" href="#L1698">1698</a>
: unsolvableMethod(node, methodName, argv);
+<a class="jxr_linenumber" name="L1699" href="#L1699">1699</a> }
+<a class="jxr_linenumber" name="L1700" href="#L1700">1700</a>
+<a class="jxr_linenumber" name="L1701" href="#L1701">1701</a> @Override
+<a class="jxr_linenumber" name="L1702" href="#L1702">1702</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> ASTConstructorNode node, <strong
class="jxr_keyword">final</strong> Object data) {
+<a class="jxr_linenumber" name="L1703" href="#L1703">1703</a> <strong
class="jxr_keyword">if</strong> (isCancelled()) {
+<a class="jxr_linenumber" name="L1704" href="#L1704">1704</a>
<strong class="jxr_keyword">throw</strong> <strong
class="jxr_keyword">new</strong> JexlException.Cancel(node);
+<a class="jxr_linenumber" name="L1705" href="#L1705">1705</a> }
+<a class="jxr_linenumber" name="L1706" href="#L1706">1706</a> <em
class="jxr_comment">// first child is class or class name</em>
+<a class="jxr_linenumber" name="L1707" href="#L1707">1707</a> <strong
class="jxr_keyword">final</strong> Object target =
node.jjtGetChild(0).jjtAccept(<strong class="jxr_keyword">this</strong>, data);
+<a class="jxr_linenumber" name="L1708" href="#L1708">1708</a> <em
class="jxr_comment">// get the ctor args</em>
+<a class="jxr_linenumber" name="L1709" href="#L1709">1709</a> <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
argc = node.jjtGetNumChildren() - 1;
+<a class="jxr_linenumber" name="L1710" href="#L1710">1710</a> Object[]
argv = <strong class="jxr_keyword">new</strong> Object[argc];
+<a class="jxr_linenumber" name="L1711" href="#L1711">1711</a> <strong
class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i =
0; i < argc; i++) {
+<a class="jxr_linenumber" name="L1712" href="#L1712">1712</a>
argv[i] = node.jjtGetChild(i + 1).jjtAccept(<strong
class="jxr_keyword">this</strong>, data);
+<a class="jxr_linenumber" name="L1713" href="#L1713">1713</a> }
+<a class="jxr_linenumber" name="L1714" href="#L1714">1714</a>
+<a class="jxr_linenumber" name="L1715" href="#L1715">1715</a> <strong
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1716" href="#L1716">1716</a>
<strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">boolean</strong> cacheable = cache;
+<a class="jxr_linenumber" name="L1717" href="#L1717">1717</a> <em
class="jxr_comment">// attempt to reuse last funcall cached in volatile
JexlNode.value</em>
+<a class="jxr_linenumber" name="L1718" href="#L1718">1718</a>
<strong class="jxr_keyword">if</strong> (cacheable) {
+<a class="jxr_linenumber" name="L1719" href="#L1719">1719</a>
<strong class="jxr_keyword">final</strong> Object cached = node.jjtGetValue();
+<a class="jxr_linenumber" name="L1720" href="#L1720">1720</a>
<strong class="jxr_keyword">if</strong> (cached instanceof Funcall) {
+<a class="jxr_linenumber" name="L1721" href="#L1721">1721</a>
<strong class="jxr_keyword">final</strong> Object eval = ((Funcall)
cached).tryInvoke(<strong class="jxr_keyword">this</strong>, <strong
class="jxr_keyword">null</strong>, target, argv);
+<a class="jxr_linenumber" name="L1722" href="#L1722">1722</a>
<strong class="jxr_keyword">if</strong> (JexlEngine.TRY_FAILED != eval) {
+<a class="jxr_linenumber" name="L1723" href="#L1723">1723</a>
<strong class="jxr_keyword">return</strong> eval;
+<a class="jxr_linenumber" name="L1724" href="#L1724">1724</a>
}
+<a class="jxr_linenumber" name="L1725" href="#L1725">1725</a> }
+<a class="jxr_linenumber" name="L1726" href="#L1726">1726</a> }
+<a class="jxr_linenumber" name="L1727" href="#L1727">1727</a>
<strong class="jxr_keyword">boolean</strong> narrow = false;
+<a class="jxr_linenumber" name="L1728" href="#L1728">1728</a> <a
name="JexlMethod"
href="../../../../../org/apache/commons/jexl3/introspection/JexlMethod.html#JexlMethod">JexlMethod</a>
ctor = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1729" href="#L1729">1729</a>
Funcall funcall = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1730" href="#L1730">1730</a>
<strong class="jxr_keyword">while</strong> (<strong
class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="L1731" href="#L1731">1731</a>
<em class="jxr_comment">// try as stated</em>
+<a class="jxr_linenumber" name="L1732" href="#L1732">1732</a>
ctor = uberspect.getConstructor(target, argv);
+<a class="jxr_linenumber" name="L1733" href="#L1733">1733</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1734" href="#L1734">1734</a>
<strong class="jxr_keyword">if</strong> (cacheable &&
ctor.isCacheable()) {
+<a class="jxr_linenumber" name="L1735" href="#L1735">1735</a>
funcall = <strong class="jxr_keyword">new</strong> Funcall(ctor, narrow);
+<a class="jxr_linenumber" name="L1736" href="#L1736">1736</a>
}
+<a class="jxr_linenumber" name="L1737" href="#L1737">1737</a>
<strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="L1738" href="#L1738">1738</a> }
+<a class="jxr_linenumber" name="L1739" href="#L1739">1739</a>
<em class="jxr_comment">// try with prepending context as first argument</em>
+<a class="jxr_linenumber" name="L1740" href="#L1740">1740</a>
<strong class="jxr_keyword">final</strong> Object[] nargv =
callArguments(context, narrow, argv);
+<a class="jxr_linenumber" name="L1741" href="#L1741">1741</a>
ctor = uberspect.getConstructor(target, nargv);
+<a class="jxr_linenumber" name="L1742" href="#L1742">1742</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1743" href="#L1743">1743</a>
<strong class="jxr_keyword">if</strong> (cacheable &&
ctor.isCacheable()) {
+<a class="jxr_linenumber" name="L1744" href="#L1744">1744</a>
funcall = <strong class="jxr_keyword">new</strong> ContextualCtor(ctor,
narrow);
+<a class="jxr_linenumber" name="L1745" href="#L1745">1745</a>
}
+<a class="jxr_linenumber" name="L1746" href="#L1746">1746</a>
argv = nargv;
+<a class="jxr_linenumber" name="L1747" href="#L1747">1747</a>
<strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="L1748" href="#L1748">1748</a> }
+<a class="jxr_linenumber" name="L1749" href="#L1749">1749</a>
<em class="jxr_comment">// if we did not find an exact method by name and we
haven't tried yet,</em>
+<a class="jxr_linenumber" name="L1750" href="#L1750">1750</a>
<em class="jxr_comment">// attempt to narrow the parameters and if this
succeeds, try again in next loop</em>
+<a class="jxr_linenumber" name="L1751" href="#L1751">1751</a>
<strong class="jxr_keyword">if</strong> (!narrow &&
arithmetic.narrowArguments(argv)) {
+<a class="jxr_linenumber" name="L1752" href="#L1752">1752</a>
narrow = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L1753" href="#L1753">1753</a>
<strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="L1754" href="#L1754">1754</a> }
+<a class="jxr_linenumber" name="L1755" href="#L1755">1755</a>
<em class="jxr_comment">// we are done trying</em>
+<a class="jxr_linenumber" name="L1756" href="#L1756">1756</a>
<strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="L1757" href="#L1757">1757</a> }
+<a class="jxr_linenumber" name="L1758" href="#L1758">1758</a> <em
class="jxr_comment">// we have either evaluated and returned or might have
found a ctor</em>
+<a class="jxr_linenumber" name="L1759" href="#L1759">1759</a>
<strong class="jxr_keyword">if</strong> (ctor != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1760" href="#L1760">1760</a>
<strong class="jxr_keyword">final</strong> Object eval = ctor.invoke(target,
argv);
+<a class="jxr_linenumber" name="L1761" href="#L1761">1761</a>
<em class="jxr_comment">// cache executor in volatile JexlNode.value</em>
+<a class="jxr_linenumber" name="L1762" href="#L1762">1762</a>
<strong class="jxr_keyword">if</strong> (funcall != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1763" href="#L1763">1763</a>
node.jjtSetValue(funcall);
+<a class="jxr_linenumber" name="L1764" href="#L1764">1764</a> }
+<a class="jxr_linenumber" name="L1765" href="#L1765">1765</a>
<strong class="jxr_keyword">return</strong> eval;
+<a class="jxr_linenumber" name="L1766" href="#L1766">1766</a> }
+<a class="jxr_linenumber" name="L1767" href="#L1767">1767</a>
<strong class="jxr_keyword">final</strong> String tstr = target != <strong
class="jxr_keyword">null</strong> ? target.toString() : <span
class="jxr_string">"?"</span>;
+<a class="jxr_linenumber" name="L1768" href="#L1768">1768</a>
<strong class="jxr_keyword">return</strong> unsolvableMethod(node, tstr, argv);
+<a class="jxr_linenumber" name="L1769" href="#L1769">1769</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> JexlException.Method xmethod) {
+<a class="jxr_linenumber" name="L1770" href="#L1770">1770</a>
<strong class="jxr_keyword">throw</strong> xmethod;
+<a class="jxr_linenumber" name="L1771" href="#L1771">1771</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
+<a class="jxr_linenumber" name="L1772" href="#L1772">1772</a>
<strong class="jxr_keyword">final</strong> String tstr = target != <strong
class="jxr_keyword">null</strong> ? target.toString() : <span
class="jxr_string">"?"</span>;
+<a class="jxr_linenumber" name="L1773" href="#L1773">1773</a>
<strong class="jxr_keyword">throw</strong> invocationException(node, tstr,
xany);
+<a class="jxr_linenumber" name="L1774" href="#L1774">1774</a> }
+<a class="jxr_linenumber" name="L1775" href="#L1775">1775</a> }
+<a class="jxr_linenumber" name="L1776" href="#L1776">1776</a>
+<a class="jxr_linenumber" name="L1777" href="#L1777">1777</a> @Override
+<a class="jxr_linenumber" name="L1778" href="#L1778">1778</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> <a name="ASTJxltLiteral"
href="../../../../../org/apache/commons/jexl3/parser/ASTJxltLiteral.html#ASTJxltLiteral">ASTJxltLiteral</a>
node, <strong class="jxr_keyword">final</strong> Object data) {
+<a class="jxr_linenumber" name="L1779" href="#L1779">1779</a>
TemplateEngine.TemplateExpression tp = (TemplateEngine.TemplateExpression)
node.jjtGetValue();
+<a class="jxr_linenumber" name="L1780" href="#L1780">1780</a> <strong
class="jxr_keyword">if</strong> (tp == <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1781" href="#L1781">1781</a>
<strong class="jxr_keyword">final</strong> <a name="TemplateEngine"
href="../../../../../org/apache/commons/jexl3/internal/TemplateEngine.html#TemplateEngine">TemplateEngine</a>
jxlt = jexl.jxlt();
+<a class="jxr_linenumber" name="L1782" href="#L1782">1782</a> <a
name="JexlInfo"
href="../../../../../org/apache/commons/jexl3/JexlInfo.html#JexlInfo">JexlInfo</a>
info = node.jexlInfo();
+<a class="jxr_linenumber" name="L1783" href="#L1783">1783</a>
<strong class="jxr_keyword">if</strong> (<strong
class="jxr_keyword">this</strong>.block != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1784" href="#L1784">1784</a>
info = <strong class="jxr_keyword">new</strong> JexlNode.Info(node, info);
+<a class="jxr_linenumber" name="L1785" href="#L1785">1785</a> }
+<a class="jxr_linenumber" name="L1786" href="#L1786">1786</a> tp =
jxlt.parseExpression(info, node.getLiteral(), frame != <strong
class="jxr_keyword">null</strong> ? frame.getScope() : <strong
class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L1787" href="#L1787">1787</a>
node.jjtSetValue(tp);
+<a class="jxr_linenumber" name="L1788" href="#L1788">1788</a> }
+<a class="jxr_linenumber" name="L1789" href="#L1789">1789</a> <strong
class="jxr_keyword">if</strong> (tp != <strong
class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="L1790" href="#L1790">1790</a>
<strong class="jxr_keyword">return</strong> tp.evaluate(frame, context);
+<a class="jxr_linenumber" name="L1791" href="#L1791">1791</a> }
+<a class="jxr_linenumber" name="L1792" href="#L1792">1792</a> <strong
class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1793" href="#L1793">1793</a> }
+<a class="jxr_linenumber" name="L1794" href="#L1794">1794</a>
+<a class="jxr_linenumber" name="L1795" href="#L1795">1795</a> @Override
+<a class="jxr_linenumber" name="L1796" href="#L1796">1796</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> <a name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>
node, <strong class="jxr_keyword">final</strong> Object data) {
+<a class="jxr_linenumber" name="L1797" href="#L1797">1797</a> <strong
class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong>
UnsupportedOperationException(ASTAnnotation.<strong
class="jxr_keyword">class</strong>.getName() + <span class="jxr_string">": Not
supported."</span>);
+<a class="jxr_linenumber" name="L1798" href="#L1798">1798</a> }
+<a class="jxr_linenumber" name="L1799" href="#L1799">1799</a>
+<a class="jxr_linenumber" name="L1800" href="#L1800">1800</a> @Override
+<a class="jxr_linenumber" name="L1801" href="#L1801">1801</a> <strong
class="jxr_keyword">protected</strong> Object visit(<strong
class="jxr_keyword">final</strong> ASTAnnotatedStatement node, <strong
class="jxr_keyword">final</strong> Object data) {
+<a class="jxr_linenumber" name="L1802" href="#L1802">1802</a> <strong
class="jxr_keyword">return</strong> processAnnotation(node, 0, data);
+<a class="jxr_linenumber" name="L1803" href="#L1803">1803</a> }
+<a class="jxr_linenumber" name="L1804" href="#L1804">1804</a>
+<a class="jxr_linenumber" name="L1805" href="#L1805">1805</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1806" href="#L1806">1806</a> <em
class="jxr_javadoccomment"> * An annotated call.</em>
+<a class="jxr_linenumber" name="L1807" href="#L1807">1807</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1808" href="#L1808">1808</a> <strong
class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong>
AnnotatedCall <strong class="jxr_keyword">implements</strong>
Callable<Object> {
+<a class="jxr_linenumber" name="L1809" href="#L1809">1809</a> <em
class="jxr_javadoccomment">/** The statement. */</em>
+<a class="jxr_linenumber" name="L1810" href="#L1810">1810</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
ASTAnnotatedStatement stmt;
+<a class="jxr_linenumber" name="L1811" href="#L1811">1811</a> <em
class="jxr_javadoccomment">/** The child index. */</em>
+<a class="jxr_linenumber" name="L1812" href="#L1812">1812</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
<strong class="jxr_keyword">int</strong> index;
+<a class="jxr_linenumber" name="L1813" href="#L1813">1813</a> <em
class="jxr_javadoccomment">/** The data. */</em>
+<a class="jxr_linenumber" name="L1814" href="#L1814">1814</a> <strong
class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong>
Object data;
+<a class="jxr_linenumber" name="L1815" href="#L1815">1815</a> <em
class="jxr_javadoccomment">/** Tracking whether we processed the annotation.
*/</em>
+<a class="jxr_linenumber" name="L1816" href="#L1816">1816</a> <strong
class="jxr_keyword">private</strong> <strong
class="jxr_keyword">boolean</strong> processed = false;
+<a class="jxr_linenumber" name="L1817" href="#L1817">1817</a>
+<a class="jxr_linenumber" name="L1818" href="#L1818">1818</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1819" href="#L1819">1819</a> <em
class="jxr_javadoccomment"> * Simple ctor.</em>
+<a class="jxr_linenumber" name="L1820" href="#L1820">1820</a> <em
class="jxr_javadoccomment"> * @param astmt the statement</em>
+<a class="jxr_linenumber" name="L1821" href="#L1821">1821</a> <em
class="jxr_javadoccomment"> * @param aindex the index</em>
+<a class="jxr_linenumber" name="L1822" href="#L1822">1822</a> <em
class="jxr_javadoccomment"> * @param adata the data</em>
+<a class="jxr_linenumber" name="L1823" href="#L1823">1823</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1824" href="#L1824">1824</a>
AnnotatedCall(<strong class="jxr_keyword">final</strong> ASTAnnotatedStatement
astmt, <strong class="jxr_keyword">final</strong> <strong
class="jxr_keyword">int</strong> aindex, <strong
class="jxr_keyword">final</strong> Object adata) {
+<a class="jxr_linenumber" name="L1825" href="#L1825">1825</a> stmt
= astmt;
+<a class="jxr_linenumber" name="L1826" href="#L1826">1826</a>
index = aindex;
+<a class="jxr_linenumber" name="L1827" href="#L1827">1827</a> data
= adata;
+<a class="jxr_linenumber" name="L1828" href="#L1828">1828</a> }
+<a class="jxr_linenumber" name="L1829" href="#L1829">1829</a>
+<a class="jxr_linenumber" name="L1830" href="#L1830">1830</a>
+<a class="jxr_linenumber" name="L1831" href="#L1831">1831</a> @Override
+<a class="jxr_linenumber" name="L1832" href="#L1832">1832</a> <strong
class="jxr_keyword">public</strong> Object call() <strong
class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="L1833" href="#L1833">1833</a>
processed = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L1834" href="#L1834">1834</a>
<strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1835" href="#L1835">1835</a>
<strong class="jxr_keyword">return</strong> processAnnotation(stmt, index,
data);
+<a class="jxr_linenumber" name="L1836" href="#L1836">1836</a> }
<strong class="jxr_keyword">catch</strong> (JexlException.Return |
JexlException.Break | JexlException.Continue xreturn) {
+<a class="jxr_linenumber" name="L1837" href="#L1837">1837</a>
<strong class="jxr_keyword">return</strong> xreturn;
+<a class="jxr_linenumber" name="L1838" href="#L1838">1838</a> }
+<a class="jxr_linenumber" name="L1839" href="#L1839">1839</a> }
+<a class="jxr_linenumber" name="L1840" href="#L1840">1840</a>
+<a class="jxr_linenumber" name="L1841" href="#L1841">1841</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1842" href="#L1842">1842</a> <em
class="jxr_javadoccomment"> * @return whether the statement has been
processed</em>
+<a class="jxr_linenumber" name="L1843" href="#L1843">1843</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1844" href="#L1844">1844</a> <strong
class="jxr_keyword">public</strong> <strong
class="jxr_keyword">boolean</strong> isProcessed() {
+<a class="jxr_linenumber" name="L1845" href="#L1845">1845</a>
<strong class="jxr_keyword">return</strong> processed;
+<a class="jxr_linenumber" name="L1846" href="#L1846">1846</a> }
+<a class="jxr_linenumber" name="L1847" href="#L1847">1847</a>
+<a class="jxr_linenumber" name="L1848" href="#L1848">1848</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1849" href="#L1849">1849</a> <em
class="jxr_javadoccomment"> * @return the actual statement.</em>
+<a class="jxr_linenumber" name="L1850" href="#L1850">1850</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1851" href="#L1851">1851</a> <strong
class="jxr_keyword">public</strong> Object getStatement() {
+<a class="jxr_linenumber" name="L1852" href="#L1852">1852</a>
<strong class="jxr_keyword">return</strong> stmt;
+<a class="jxr_linenumber" name="L1853" href="#L1853">1853</a> }
+<a class="jxr_linenumber" name="L1854" href="#L1854">1854</a> }
+<a class="jxr_linenumber" name="L1855" href="#L1855">1855</a>
+<a class="jxr_linenumber" name="L1856" href="#L1856">1856</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1857" href="#L1857">1857</a> <em
class="jxr_javadoccomment"> * Processes an annotated statement.</em>
+<a class="jxr_linenumber" name="L1858" href="#L1858">1858</a> <em
class="jxr_javadoccomment"> * @param stmt the statement</em>
+<a class="jxr_linenumber" name="L1859" href="#L1859">1859</a> <em
class="jxr_javadoccomment"> * @param index the index of the current
annotation being processed</em>
+<a class="jxr_linenumber" name="L1860" href="#L1860">1860</a> <em
class="jxr_javadoccomment"> * @param data the contextual data</em>
+<a class="jxr_linenumber" name="L1861" href="#L1861">1861</a> <em
class="jxr_javadoccomment"> * @return the result of the statement block
evaluation</em>
+<a class="jxr_linenumber" name="L1862" href="#L1862">1862</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1863" href="#L1863">1863</a> <strong
class="jxr_keyword">protected</strong> Object processAnnotation(<strong
class="jxr_keyword">final</strong> ASTAnnotatedStatement stmt, <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
index, <strong class="jxr_keyword">final</strong> Object data) {
+<a class="jxr_linenumber" name="L1864" href="#L1864">1864</a> <em
class="jxr_comment">// are we evaluating the block ?</em>
+<a class="jxr_linenumber" name="L1865" href="#L1865">1865</a> <strong
class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong>
last = stmt.jjtGetNumChildren() - 1;
+<a class="jxr_linenumber" name="L1866" href="#L1866">1866</a> <strong
class="jxr_keyword">if</strong> (index == last) {
+<a class="jxr_linenumber" name="L1867" href="#L1867">1867</a>
<strong class="jxr_keyword">final</strong> <a name="JexlNode"
href="../../../../../org/apache/commons/jexl3/parser/JexlNode.html#JexlNode">JexlNode</a>
cblock = stmt.jjtGetChild(last);
+<a class="jxr_linenumber" name="L1868" href="#L1868">1868</a> <em
class="jxr_comment">// if the context has changed, might need a new
interpreter</em>
+<a class="jxr_linenumber" name="L1869" href="#L1869">1869</a>
<strong class="jxr_keyword">final</strong> <a name="JexlArithmetic"
href="../../../../../org/apache/commons/jexl3/JexlArithmetic.html#JexlArithmetic">JexlArithmetic</a>
jexla = arithmetic.options(context);
+<a class="jxr_linenumber" name="L1870" href="#L1870">1870</a>
<strong class="jxr_keyword">if</strong> (jexla == arithmetic) {
+<a class="jxr_linenumber" name="L1871" href="#L1871">1871</a>
<strong class="jxr_keyword">return</strong>
cblock.jjtAccept(Interpreter.<strong class="jxr_keyword">this</strong>, data);
+<a class="jxr_linenumber" name="L1872" href="#L1872">1872</a> }
+<a class="jxr_linenumber" name="L1873" href="#L1873">1873</a>
<strong class="jxr_keyword">if</strong>
(!arithmetic.getClass().equals(jexla.getClass())) {
+<a class="jxr_linenumber" name="L1874" href="#L1874">1874</a>
logger.warn(<span class="jxr_string">"expected arithmetic to be "</span> +
arithmetic.getClass().getSimpleName()
+<a class="jxr_linenumber" name="L1875" href="#L1875">1875</a>
+ <span class="jxr_string">", got "</span> +
jexla.getClass().getSimpleName()
+<a class="jxr_linenumber" name="L1876" href="#L1876">1876</a>
);
+<a class="jxr_linenumber" name="L1877" href="#L1877">1877</a> }
+<a class="jxr_linenumber" name="L1878" href="#L1878">1878</a>
<strong class="jxr_keyword">final</strong> <a name="Interpreter"
href="../../../../../org/apache/comm<a name="Interpreter"
href="../../../../../org/apache/commons/jexl3/internal/Interpreter.html#Interpreter">Interpreter</a>nternal/Interpreter.html#Interpreter">Interpreter</a>
ii = <strong class="jxr_keyword">new</strong> <a name="Interpreter"
href="../../../../../org/apache/commons/jexl3/internal/Interpreter.html#Interpreter">Interpreter</a>(Interpreter.<strong
class="jxr_keyword">this</strong>, jexla);
+<a class="jxr_linenumber" name="L1879" href="#L1879">1879</a>
<strong class="jxr_keyword">final</strong> Object r = cblock.jjtAccept(ii,
data);
+<a class="jxr_linenumber" name="L1880" href="#L1880">1880</a>
<strong class="jxr_keyword">if</strong> (ii.isCancelled()) {
+<a class="jxr_linenumber" name="L1881" href="#L1881">1881</a>
Interpreter.<strong class="jxr_keyword">this</strong>.cancel();
+<a class="jxr_linenumber" name="L1882" href="#L1882">1882</a> }
+<a class="jxr_linenumber" name="L1883" href="#L1883">1883</a>
<strong class="jxr_keyword">return</strong> r;
+<a class="jxr_linenumber" name="L1884" href="#L1884">1884</a> }
+<a class="jxr_linenumber" name="L1885" href="#L1885">1885</a> <em
class="jxr_comment">// tracking whether we processed the annotation</em>
+<a class="jxr_linenumber" name="L1886" href="#L1886">1886</a> <strong
class="jxr_keyword">final</strong> AnnotatedCall jstmt = <strong
class="jxr_keyword">new</strong> AnnotatedCall(stmt, index + 1, data);
+<a class="jxr_linenumber" name="L1887" href="#L1887">1887</a> <em
class="jxr_comment">// the annotation node and name</em>
+<a class="jxr_linenumber" name="L1888" href="#L1888">1888</a> <strong
class="jxr_keyword">final</strong> <a name="ASTAnnotation"<a
name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>
anode = (<a name="ASTAnnotation"
href="../../../../../org/apache/commons/jexl3/parser/ASTAnnotation.html#ASTAnnotation">ASTAnnotation</a>)
stmt.jjtGetChild(index);
+<a class="jxr_linenumber" name="L1889" href="#L1889">1889</a> <strong
class="jxr_keyword">final</strong> String aname = anode.getName();
+<a class="jxr_linenumber" name="L1890" href="#L1890">1890</a> <em
class="jxr_comment">// evaluate the arguments</em>
+<a class="jxr_linenumber" name="L1891" href="#L1891">1891</a> <strong
class="jxr_keyword">final</strong> Object[] argv = anode.jjtGetNumChildren()
> 0
+<a class="jxr_linenumber" name="L1892" href="#L1892">1892</a>
? visit((ASTArguments) anode.jjtGetChild(0), <strong
class="jxr_keyword">null</strong>) : <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1893" href="#L1893">1893</a> <em
class="jxr_comment">// wrap the future, will recurse through annotation
processor</em>
+<a class="jxr_linenumber" name="L1894" href="#L1894">1894</a> Object
result;
+<a class="jxr_linenumber" name="L1895" href="#L1895">1895</a> <strong
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1896" href="#L1896">1896</a>
result = processAnnotation(aname, argv, jstmt);
+<a class="jxr_linenumber" name="L1897" href="#L1897">1897</a> <em
class="jxr_comment">// not processing an annotation is an error</em>
+<a class="jxr_linenumber" name="L1898" href="#L1898">1898</a>
<strong class="jxr_keyword">if</strong> (!jstmt.isProcessed()) {
+<a class="jxr_linenumber" name="L1899" href="#L1899">1899</a>
<strong class="jxr_keyword">return</strong> annotationError(anode, aname,
<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L1900" href="#L1900">1900</a> }
+<a class="jxr_linenumber" name="L1901" href="#L1901">1901</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>
xany) {
+<a class="jxr_linenumber" name="L1902" href="#L1902">1902</a>
<strong class="jxr_keyword">throw</strong> xany;
+<a class="jxr_linenumber" name="L1903" href="#L1903">1903</a> }
<strong class="jxr_keyword">catch</strong> (<strong
class="jxr_keyword">final</strong> Exception xany) {
+<a class="jxr_linenumber" name="L1904" href="#L1904">1904</a>
<strong class="jxr_keyword">return</strong> annotationError(anode, aname, xany);
+<a class="jxr_linenumber" name="L1905" href="#L1905">1905</a> }
+<a class="jxr_linenumber" name="L1906" href="#L1906">1906</a> <em
class="jxr_comment">// the caller may return a return, break or continue</em>
+<a class="jxr_linenumber" name="L1907" href="#L1907">1907</a> <strong
class="jxr_keyword">if</strong> (result instanceof <a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>)
{
+<a class="jxr_linenumber" name="L1908" href="#L1908">1908</a>
<strong class="jxr_keyword">throw</strong> (<a name="JexlException"
href="../../../../../org/apache/commons/jexl3/JexlException.html#JexlException">JexlException</a>)
result;
+<a class="jxr_linenumber" name="L1909" href="#L1909">1909</a> }
+<a class="jxr_linenumber" name="L1910" href="#L1910">1910</a> <strong
class="jxr_keyword">return</strong> result;
+<a class="jxr_linenumber" name="L1911" href="#L1911">1911</a> }
+<a class="jxr_linenumber" name="L1912" href="#L1912">1912</a>
+<a class="jxr_linenumber" name="L1913" href="#L1913">1913</a> <em
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1914" href="#L1914">1914</a> <em
class="jxr_javadoccomment"> * Delegates the annotation processing to the
JexlContext if it is an AnnotationProcessor.</em>
+<a class="jxr_linenumber" name="L1915" href="#L1915">1915</a> <em
class="jxr_javadoccomment"> * @param annotation the annotation name</em>
+<a class="jxr_linenumber" name="L1916" href="#L1916">1916</a> <em
class="jxr_javadoccomment"> * @param args the annotation
arguments</em>
+<a class="jxr_linenumber" name="L1917" href="#L1917">1917</a> <em
class="jxr_javadoccomment"> * @param stmt the statement / block
that was annotated</em>
+<a class="jxr_linenumber" name="L1918" href="#L1918">1918</a> <em
class="jxr_javadoccomment"> * @return the result of statement.call()</em>
+<a class="jxr_linenumber" name="L1919" href="#L1919">1919</a> <em
class="jxr_javadoccomment"> * @throws Exception if anything goes wrong</em>
+<a class="jxr_linenumber" name="L1920" href="#L1920">1920</a> <em
class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1921" href="#L1921">1921</a> <strong
class="jxr_keyword">protected</strong> Object processAnnotation(<strong
class="jxr_keyword">final</strong> String annotation, <strong
class="jxr_keyword">final</strong> Object[] args, <strong
class="jxr_keyword">final</strong> Callable<Object> stmt) <strong
class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="L1922" href="#L1922">1922</a>
<strong class="jxr_keyword">return</strong> context instanceof
JexlContext.AnnotationProcessor
+<a class="jxr_linenumber" name="L1923" href="#L1923">1923</a>
? ((JexlContext.AnnotationProcessor) context).processAnnotation(annotation,
args, stmt)
+<a class="jxr_linenumber" name="L1924" href="#L1924">1924</a>
: stmt.call();
+<a class="jxr_linenumber" name="L1925" href="#L1925">1925</a> }
+<a class="jxr_linenumber" name="L1926" href="#L1926">1926</a> }
</pre>
<hr/>
<div id="footer">Copyright © 2001–2021 <a
href="https://www.apache.org/">The Apache Software Foundation</a>. All rights
reserved.</div>