use of org.opendaylight.yangtools.yang.model.api.PathExpression.DerefSteps in project yangtools by opendaylight.
the class PathExpressionParserTest method testDerefPath.
@Test
public void testDerefPath() {
// deref() is not valid as per RFC7950, but we tolarate it.
final PathExpression deref = parser.parseExpression(ctx, "deref(../id)/../type");
final Steps steps = deref.getSteps();
assertThat(steps, isA(DerefSteps.class));
final DerefSteps derefSteps = (DerefSteps) steps;
assertEquals(YangLocationPath.relative(YangXPathAxis.PARENT.asStep(), YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("type"))), derefSteps.getRelativePath());
assertEquals(YangLocationPath.relative(YangXPathAxis.PARENT.asStep(), YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("id"))), derefSteps.getDerefArgument());
}
use of org.opendaylight.yangtools.yang.model.api.PathExpression.DerefSteps in project yangtools by opendaylight.
the class PathExpressionParser method parseExpression.
PathExpression parseExpression(final StmtContext<?, ?, ?> ctx, final String pathArg) {
final LeafRefPathLexer lexer = new LeafRefPathLexer(CharStreams.fromString(pathArg));
final LeafRefPathParser parser = new LeafRefPathParser(new CommonTokenStream(lexer));
final Path_argContext path = SourceExceptionParser.parse(lexer, parser, parser::path_arg, ctx.sourceReference());
final ParseTree childPath = path.getChild(0);
final Steps steps;
if (childPath instanceof Path_strContext) {
steps = new LocationPathSteps(parsePathStr(ctx, pathArg, (Path_strContext) childPath));
} else if (childPath instanceof Deref_exprContext) {
final Deref_exprContext deref = (Deref_exprContext) childPath;
steps = new DerefSteps(parseRelative(ctx, pathArg, getChild(deref, 0, Deref_function_invocationContext.class).getChild(Relative_pathContext.class, 0)), parseRelative(ctx, pathArg, getChild(deref, deref.getChildCount() - 1, Relative_pathContext.class)));
} else {
throw new IllegalStateException("Unsupported child " + childPath);
}
return new ParsedPathExpression(steps, pathArg);
}
Aggregations