dion        2004/08/15 09:01:12

  Modified:    jexl/xdocs changes.xml
               jexl/src/java/org/apache/commons/jexl/parser
                        ASTSizeFunction.java
               jexl/src/test/org/apache/commons/jexl JexlTest.java
  Log:
  Handle any size method that returns an int
  
  Revision  Changes    Path
  1.4       +1 -0      jakarta-commons/jexl/xdocs/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jexl/xdocs/changes.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- changes.xml       15 Aug 2004 15:46:45 -0000      1.3
  +++ changes.xml       15 Aug 2004 16:01:12 -0000      1.4
  @@ -25,6 +25,7 @@
     </properties>
     <body>
       <release version="1.0-beta-3-SNAPSHOT" date="in CVS">
  +      <action dev="dion" type="add">Handle any size() method that returns an 
int</action>
         <action dev="dion" type="fix" issue="30562">Can't issue .size() on 
java.util.Set</action>
       </release>
     </body>
  
  
  
  1.6       +20 -3     
jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTSizeFunction.java
  
  Index: ASTSizeFunction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTSizeFunction.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ASTSizeFunction.java      15 Aug 2004 15:32:52 -0000      1.5
  +++ ASTSizeFunction.java      15 Aug 2004 16:01:12 -0000      1.6
  @@ -16,6 +16,9 @@
   package org.apache.commons.jexl.parser;
   
   import org.apache.commons.jexl.JexlContext;
  +import org.apache.commons.jexl.util.Introspector;
  +import org.apache.commons.jexl.util.introspection.Info;
  +import org.apache.commons.jexl.util.introspection.VelMethod;
   
   import java.util.List;
   import java.util.Map;
  @@ -87,8 +90,22 @@
           {
               return ((Set)val).size();
           }
  -
  -        throw new Exception("size() : unknown type : " + val.getClass());
  +        else {
  +             // check if there is a size method on the object that returns an 
integer
  +             // and if so, just use it
  +             Object[] params = new Object[0];
  +             Info velInfo = new Info("",1,1);
  +            VelMethod vm = Introspector.getUberspect().getMethod(val, "size", 
params, velInfo);
  +            if (vm != null && vm.getReturnType() == Integer.TYPE)
  +            {
  +             Integer result = (Integer)vm.invoke(val, params);
  +             return result.intValue();
  +            }
  +            else
  +            {
  +                throw new Exception("size() : unknown type : " + val.getClass());
  +            }
  +        }
       }
   
   }
  
  
  
  1.38      +10 -2     
jakarta-commons/jexl/src/test/org/apache/commons/jexl/JexlTest.java
  
  Index: JexlTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jexl/src/test/org/apache/commons/jexl/JexlTest.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- JexlTest.java     15 Aug 2004 15:32:52 -0000      1.37
  +++ JexlTest.java     15 Aug 2004 16:01:12 -0000      1.38
  @@ -16,6 +16,7 @@
   package org.apache.commons.jexl;
   
   import java.util.ArrayList;
  +import java.util.BitSet;
   import java.util.HashMap;
   import java.util.HashSet;
   import java.util.List;
  @@ -397,21 +398,28 @@
           list.add("5");
   
           jc.getVars().put("list", list);
  -        
  +
  +        // 30652 - support for set
           Set set = new HashSet();
           set.addAll(list);
           set.add("1");
           
           jc.getVars().put("set", set);
  +        
  +        // support generic int size() method
  +        BitSet bitset = new BitSet(5);
  +        jc.getVars().put("bitset", bitset);
   
           assertExpression(jc, "size(s)", new Integer(5));
           assertExpression(jc, "size(array)", new Integer(5));
           assertExpression(jc, "size(list)", new Integer(5));
           assertExpression(jc, "size(map)", new Integer(5));
           assertExpression(jc, "size(set)", new Integer(5));
  +        assertExpression(jc, "size(bitset)", new Integer(64));
           assertExpression(jc, "list.size()", new Integer(5));
           assertExpression(jc, "map.size()", new Integer(5));
           assertExpression(jc, "set.size()", new Integer(5));
  +        assertExpression(jc, "bitset.size()", new Integer(64));
   
           assertExpression(jc, "list.get(size(list) - 1)", "5");
           assertExpression(jc, "list[size(list) - 1]", "5");
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to