- public void enterStatement(YangStatementParser.StatementContext ctx) {
- boolean action = true;
- for (int i = 0; i < ctx.getChildCount(); i++) {
- ParseTree child = ctx.getChild(i);
- if (child instanceof YangStatementParser.KeywordContext) {
- try {
- QName identifier = new QName(YangConstants.RFC6020_YIN_NAMESPACE,
- ((YangStatementParser.KeywordContext) child).children.get(0).getText());
- if (stmtDef != null && stmtDef.get(identifier) != null && toBeSkipped.isEmpty()) {
- writer.startStatement(identifier, ref);
+ public void enterStatement(final YangStatementParser.StatementContext ctx) {
+ final StatementSourceReference ref = DeclarationInTextSource.atPosition(sourceName, ctx
+ .getStart().getLine(), ctx.getStart().getCharPositionInLine());
+ final KeywordContext keywordCtx = Verify.verifyNotNull(ctx.getChild(KeywordContext.class, 0));
+ final ArgumentContext argumentCtx = ctx.getChild(ArgumentContext.class, 0);
+
+ String keywordTxt = keywordCtx.getText();
+ try {
+ // FIXME: This is broken for extensions - not all statements are in RFC6020 ns.
+ final QName identifier = QName.create(YangConstants.RFC6020_YIN_MODULE, keywordTxt);
+ if (stmtDef != null && Utils.isValidStatementDefinition(prefixes, stmtDef, identifier)
+ && toBeSkipped.isEmpty()) {
+ final String argument = argumentCtx != null ? Utils.stringFromStringContext(argumentCtx) : null;
+ // See,s to be fishy specialcase
+ if (identifier.equals(Rfc6020Mapping.TYPE.getStatementName())) {
+ Preconditions.checkArgument(argument != null);
+ if (TypeUtils.isYangTypeBodyStmtString(argument)) {
+ writer.startStatement(QName.create(YangConstants.RFC6020_YIN_MODULE, argument), ref);