You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2013/09/13 10:37:10 UTC

svn commit: r1522813 - /lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java

Author: uschindler
Date: Fri Sep 13 08:37:10 2013
New Revision: 1522813

URL: http://svn.apache.org/r1522813
Log:
LUCENE-5207: More strict checks for invalid method signatures (currently only double is accepted as parameter or return type). The method must be static, too.

Modified:
    lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java

Modified: lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java?rev=1522813&r1=1522812&r2=1522813&view=diff
==============================================================================
--- lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java (original)
+++ lucene/dev/branches/lucene5207/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptFunction.java Fri Sep 13 08:37:10 2013
@@ -19,6 +19,7 @@ package org.apache.lucene.expressions.js
 import java.util.HashMap;
 import java.util.Map;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 
 import org.apache.lucene.util.MathUtil;
 import org.objectweb.asm.Type;
@@ -86,8 +87,23 @@ class JavascriptFunction {
   public final String signature;
   
   private JavascriptFunction(String call, Method method) {
+    // do some checks if the signature is "compatible":
+    if (!Modifier.isStatic(method.getModifiers())) {
+      throw new Error(method + " is not static.");
+    }
+    if (method.getReturnType() != double.class) {
+      throw new Error(method + " does not return a double.");
+    }
+    
+    final Class<?>[] paramTypes = method.getParameterTypes();
+    for (final Class<?> paramType : paramTypes) {
+      if (paramType != double.class) {
+        throw new Error(method + " may only take parameters of type 'double'.");
+      }
+    }
+    
     this.call = call;
-    this.arguments = method.getParameterTypes().length;
+    this.arguments = paramTypes.length;
     this.klass = Type.getInternalName(method.getDeclaringClass());
     this.method = method.getName();
     this.signature = Type.getMethodDescriptor(method);