public YangXPathExpression.QualifiedBound parseExpression(final String xpath) throws XPathExpressionException {
final ParseExprResult result = parseExpr(xpath);
return new AntlrYangXPathExpression.Qualified(mathMode, result.minimumYangVersion, result.expression, xpath,
- namespaceContext);
+ result.haveLiteral ? namespaceContext : null);
}
@Override
final ParseExprResult result = parseExpr(xpath);
return new AntlrYangXPathExpression.Unqualified(mathMode, result.minimumYangVersion, result.expression,
- xpath, namespaceContext, defaultNamespace);
+ xpath, result.haveLiteral ? namespaceContext : null, defaultNamespace);
}
@Override
private static final class ParseExprResult {
final YangVersion minimumYangVersion;
final YangExpr expression;
+ final boolean haveLiteral;
- ParseExprResult(final YangVersion minimumYangVersion, final YangExpr expression) {
+ ParseExprResult(final YangVersion minimumYangVersion, final YangExpr expression, final boolean haveLiteral) {
this.minimumYangVersion = requireNonNull(minimumYangVersion);
this.expression = requireNonNull(expression);
+ this.haveLiteral = haveLiteral;
}
}
private final FunctionSupport functionSupport;
private YangVersion minimumYangVersion = YangVersion.VERSION_1;
+ private boolean haveLiteral = false;
AntlrXPathParser(final YangXPathMathMode mathMode) {
this.mathMode = requireNonNull(mathMode);
// Reset our internal context
minimumYangVersion = YangVersion.VERSION_1;
+ haveLiteral = false;
final YangExpr expr;
try {
} catch (RuntimeException e) {
throw new XPathExpressionException(e);
}
- return new ParseExprResult(minimumYangVersion, expr);
+ return new ParseExprResult(minimumYangVersion, expr, haveLiteral);
}
/**
if (minimumYangVersion.compareTo(func.getYangVersion()) < 0) {
minimumYangVersion = func.getYangVersion();
}
- return functionSupport.functionToExpr(func, args);
+
+ final YangExpr funcExpr = functionSupport.functionToExpr(func, args);
+ if (funcExpr instanceof YangLiteralExpr) {
+ haveLiteral = true;
+ }
+ return funcExpr;
}
checkArgument(!YangConstants.RFC6020_YIN_MODULE.equals(parsed.getModule()), "Unknown default function %s",
switch (term.getSymbol().getType()) {
case xpathParser.Literal:
// We have to strip quotes
+ haveLiteral = true;
return YangLiteralExpr.of(text.substring(1, text.length() - 1));
case xpathParser.Number:
return mathSupport.createNumber(text);