Browse Source

Merge 771eda2ad9 into 45333e0a31

pull/1011/merge
Giovanny Gutiérrez 8 months ago committed by GitHub
parent
commit
b03bd1e75f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 26
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java
  2. 6
      json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java
  3. 7
      json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java
  4. 8
      json-path/src/test/java/com/jayway/jsonpath/internal/function/NestedFunctionTest.java

26
json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java

@ -355,6 +355,7 @@ public class FilterCompiler {
int begin = filter.position();
filter.incrementPosition(1); //skip $ and @
int groupParen = 0;
while (filter.inBounds()) {
if (filter.currentChar() == OPEN_SQUARE_BRACKET) {
int closingSquareBracketIndex = filter.indexOfMatchingCloseChar(filter.position(), OPEN_SQUARE_BRACKET, CLOSE_SQUARE_BRACKET, true, false);
@ -364,14 +365,31 @@ public class FilterCompiler {
filter.setPosition(closingSquareBracketIndex + 1);
}
}
boolean closingFunctionBracket = (filter.currentChar() == CLOSE_PARENTHESIS && currentCharIsClosingFunctionBracket(begin));
boolean closingLogicalBracket = (filter.currentChar() == CLOSE_PARENTHESIS && !closingFunctionBracket);
if (!filter.inBounds() || isRelationalOperatorChar(filter.currentChar()) || filter.currentChar() == SPACE || closingLogicalBracket) {
break;
if (filter.currentChar() == OPEN_PARENTHESIS) {
groupParen++;
}
if (groupParen == 0) {
boolean closingFunctionBracket = (filter.currentChar() == CLOSE_PARENTHESIS && currentCharIsClosingFunctionBracket(begin));
boolean closingLogicalBracket = (filter.currentChar() == CLOSE_PARENTHESIS && !closingFunctionBracket);
if (!filter.inBounds() || isRelationalOperatorChar(filter.currentChar()) || filter.currentChar() == SPACE || closingLogicalBracket) {
break;
} else {
filter.incrementPosition(1);
}
} else {
if (filter.currentChar() == CLOSE_PARENTHESIS) {
groupParen--;
if (groupParen < 0) {
throw new InvalidPathException("Parentheses does not match in filter " + filter);
}
}
filter.incrementPosition(1);
}
}
boolean shouldExists = !(previousSignificantChar == NOT);

6
json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java

@ -349,15 +349,11 @@ public class PathCompiler {
// we've encountered a COMMA do the same
case CLOSE_PARENTHESIS:
groupParen--;
//CS304 Issue link: https://github.com/json-path/JsonPath/issues/620
if (0 > groupParen || priorChar == '(') {
parameter.append(c);
}
case COMMA:
// In this state we've reach the end of a function parameter and we can pass along the parameter string
// to the parser
if ((0 == groupQuote && 0 == groupBrace && 0 == groupBracket
&& ((0 == groupParen && CLOSE_PARENTHESIS == c) || 1 == groupParen))) {
&& ((0 == groupParen && CLOSE_PARENTHESIS == c) || (1 == groupParen && c == COMMA)))) {
endOfStream = (0 == groupParen);
if (null != type) {

7
json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java

@ -286,4 +286,11 @@ public class InlineFilterTest extends BaseTest {
public void filter_evaluation_does_not_break_path_evaluation(Configuration conf) {
assertHasOneResult("[{\"s\": \"fo\", \"expected_size\": \"m\"}, {\"s\": \"lo\", \"expected_size\": 2}]", "$[?(@.s size @.expected_size)]", conf);
}
@ParameterizedTest
@MethodSource("configurations")
public void testFilterCallingFunction(Configuration conf) {
assertHasOneResult("[[\"abcdef\"]]", "$[?(@.concat(\"-\") == \"abcdef-\")]", conf);
}
}

8
json-path/src/test/java/com/jayway/jsonpath/internal/function/NestedFunctionTest.java

@ -73,6 +73,14 @@ public class NestedFunctionTest extends BaseFunctionTest {
}
@ParameterizedTest
@MethodSource("configurations")
public void testMultipleCall(Configuration conf) {
verifyTextFunction(conf, "$.concat($.text[0], $.concat( $.concat($.text[3], \"-1\"), $.concat($.text[4], \"-1\")))", "ad-1e-1");
}
@ParameterizedTest
@MethodSource("configurations")
public void testStringAndNumberConcat(Configuration conf) {

Loading…
Cancel
Save