You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rj...@apache.org on 2015/04/30 18:45:38 UTC

svn commit: r1677023 - in /lucene/dev/branches/branch_5x: ./ lucene/ lucene/expressions/ lucene/expressions/src/java/org/apache/lucene/expressions/js/ lucene/expressions/src/test/org/apache/lucene/expressions/js/

Author: rjernst
Date: Thu Apr 30 16:45:37 2015
New Revision: 1677023

URL: http://svn.apache.org/r1677023
Log:
LUCENE-6454: Added distinction between member variable and method in expression helper VariableContext (merged r1677022)

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/lucene/   (props changed)
    lucene/dev/branches/branch_5x/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/lucene/expressions/   (props changed)
    lucene/dev/branches/branch_5x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java
    lucene/dev/branches/branch_5x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java

Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1677023&r1=1677022&r2=1677023&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Thu Apr 30 16:45:37 2015
@@ -59,6 +59,10 @@ New Features
 * LUCENE-6083: Add SpanWithinQuery and SpanContainingQuery that return
   spans inside of / containing another spans. (Paul Elschot via Robert Muir)
 
+* LUCENE-6454: Added distinction between member variable and method in
+  expression helper VariableContext
+  (Jack Conradson via Ryan Ernst)
+
 Optimizations
 
 * LUCENE-6379: IndexWriter.deleteDocuments(Query...) now detects if

Modified: lucene/dev/branches/branch_5x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java?rev=1677023&r1=1677022&r2=1677023&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java (original)
+++ lucene/dev/branches/branch_5x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java Thu Apr 30 16:45:37 2015
@@ -41,9 +41,14 @@ public class VariableContext {
     STR_INDEX,
 
     /**
-     * Brackets containg an integer index (ie an array).
+     * Brackets containing an integer index (ie an array).
      */
-    INT_INDEX
+    INT_INDEX,
+
+    /**
+     * Parenthesis represent a member method to be called.
+     */
+    METHOD
   }
 
   /**
@@ -93,8 +98,13 @@ public class VariableContext {
   // i points to start of member name
   private static int addMember(final char[] text, int i, List<VariableContext> contexts) {
     int j = i + 1;
-    while (j < text.length && text[j] != '[' && text[j] != '.') ++j; // find first array or member access
-    contexts.add(new VariableContext(Type.MEMBER, new String(text, i, j - i), -1));
+    while (j < text.length && text[j] != '[' && text[j] != '.' && text[j] != '(') ++j; // find first array, member access, or method call
+    if (j + 1 < text.length && text[j] == '(' && text[j + 1] == ')') {
+      contexts.add(new VariableContext(Type.METHOD, new String(text, i, j - i), -1));
+      j += 2; //move past the parenthesis
+    } else {
+      contexts.add(new VariableContext(Type.MEMBER, new String(text, i, j - i), -1));
+    }
     return j;
   }
 

Modified: lucene/dev/branches/branch_5x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java?rev=1677023&r1=1677022&r2=1677023&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java (original)
+++ lucene/dev/branches/branch_5x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java Thu Apr 30 16:45:37 2015
@@ -22,6 +22,7 @@ import org.apache.lucene.util.LuceneTest
 import static org.apache.lucene.expressions.js.VariableContext.Type.MEMBER;
 import static org.apache.lucene.expressions.js.VariableContext.Type.STR_INDEX;
 import static org.apache.lucene.expressions.js.VariableContext.Type.INT_INDEX;
+import static org.apache.lucene.expressions.js.VariableContext.Type.METHOD;
 
 public class TestVariableContext extends LuceneTestCase {
 
@@ -66,4 +67,25 @@ public class TestVariableContext extends
     assertEquals(x[2].type, INT_INDEX);
     assertEquals(x[2].integer, 1);
   }
+
+  public void testMethodWithMember() {
+    VariableContext[] x = VariableContext.parse("m.m()");
+    assertEquals(2, x.length);
+    assertEquals(x[1].type, METHOD);
+    assertEquals(x[1].text, "m");
+  }
+
+  public void testMethodWithStrIndex() {
+    VariableContext[] x = VariableContext.parse("member['blah'].getMethod()");
+    assertEquals(3, x.length);
+    assertEquals(x[2].type, METHOD);
+    assertEquals(x[2].text, "getMethod");
+  }
+
+  public void testMethodWithNumericalIndex() {
+    VariableContext[] x = VariableContext.parse("member[0].getMethod()");
+    assertEquals(3, x.length);
+    assertEquals(x[2].type, METHOD);
+    assertEquals(x[2].text, "getMethod");
+  }
 }