The parser mistakenly treated filter/path concatenation as a binary
expression, which lead to its inability to parse leafrefs, which
contain such a concatenation in predicates.
This fixes the parser to correctly use XPathExpr in this case.
Change-Id: Ica1ac3ee7d099273dccdf8565da2a69d9f11c046
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
return new YangPathExpr(filterExpr);
}
return new YangPathExpr(filterExpr);
}
- public static YangExpr of(final YangExpr expr, final YangLocationPath locationPath) {
+ public static YangPathExpr of(final YangExpr expr, final YangLocationPath locationPath) {
return new WithLocation(expr, locationPath);
}
return new WithLocation(expr, locationPath);
}
import org.opendaylight.yangtools.yang.xpath.api.YangNaryOperator;
import org.opendaylight.yangtools.yang.xpath.api.YangNegateExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangNumberExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangNaryOperator;
import org.opendaylight.yangtools.yang.xpath.api.YangNegateExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangNumberExpr;
+import org.opendaylight.yangtools.yang.xpath.api.YangPathExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangVariableReferenceExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathAxis;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression;
import org.opendaylight.yangtools.yang.xpath.api.YangVariableReferenceExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathAxis;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression;
}
verifyChildCount(expr, 3);
}
verifyChildCount(expr, 3);
-
- // FIXME: this actually is a concatenation
- return parseOperator(expr.getChild(1)).exprWith(filter,
- parseRelativeLocationPath(getChild(expr, RelativeLocationPathContext.class, 2)));
+ final Deque<Step> steps = parseLocationPathSteps(getChild(expr, RelativeLocationPathContext.class, 2));
+ parseStepShorthand(expr.getChild(1)).ifPresent(steps::addFirst);
+ return YangPathExpr.of(filter, YangLocationPath.of(false, steps));
}
private YangExpr parsePredicate(final PredicateContext expr) {
}
private YangExpr parsePredicate(final PredicateContext expr) {
@Test
public void testSmoke() throws XPathExpressionException {
@Test
public void testSmoke() throws XPathExpressionException {
+ parseExpr("../a[foo = current()/foo]");
+
parseExpr("3 + 5");
parseExpr("/a/b");
parseExpr("a/b");
parseExpr("3 + 5");
parseExpr("/a/b");
parseExpr("a/b");