You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2018/01/21 10:41:04 UTC
svn commit: r1821780 -
/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java
Author: henrib
Date: Sun Jan 21 10:41:04 2018
New Revision: 1821780
URL: http://svn.apache.org/viewvc?rev=1821780&view=rev
Log:
JEXL-246:
Improved detection of operator methods that arent overrides
Modified:
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java
Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java?rev=1821780&r1=1821779&r2=1821780&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java Sun Jan 21 10:41:04 2018
@@ -428,17 +428,24 @@ public class Uberspect implements JexlUb
Set<JexlOperator> ops = operatorMap.get(aclass);
if (ops == null) {
ops = EnumSet.noneOf(JexlOperator.class);
- for (JexlOperator op : JexlOperator.values()) {
- Method[] methods = getMethods(arithmetic.getClass(), op.getMethodName());
- if (methods != null) {
- mloop: for (Method method : methods) {
- Class<?>[] parms = method.getParameterTypes();
- if (parms.length != op.getArity()) {
- continue;
- }
- // eliminate method(Object) and method(Object, Object)
- if (!JexlArithmetic.class.equals(method.getDeclaringClass())) {
- ops.add(op);
+ // deal only with derived classes
+ if (!JexlArithmetic.class.equals(aclass)) {
+ for (JexlOperator op : JexlOperator.values()) {
+ Method[] methods = getMethods(arithmetic.getClass(), op.getMethodName());
+ if (methods != null) {
+ mloop:
+ for (Method method : methods) {
+ Class<?>[] parms = method.getParameterTypes();
+ if (parms.length != op.getArity()) {
+ continue;
+ }
+ // keep only methods that are not overrides
+ try {
+ JexlArithmetic.class.getMethod(method.getName(), method.getParameterTypes());
+ } catch (NoSuchMethodException xmethod) {
+ // method was not found in JexlArithmetic; this is an operator definition
+ ops.add(op);
+ }
}
}
}