From 18a5370a5e0edb969aa2da95ec45b08398586d7c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 13 Feb 2020 11:38:30 +0100 Subject: [PATCH] Split StatementContextVisitor.processStatement() This method is needlessly large and directly-recursive. Split it up into two methods, allowing both to be smaller. JIRA: YANGTOOLS-652 Change-Id: Ie3aab06cf66e8423a03fab6debebde7efbfcb2c1 Signed-off-by: Robert Varga --- .../rfc7950/repo/StatementContextVisitor.java | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java index 9e1c4f1000..1b44c0f4ef 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java @@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import java.util.Optional; +import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -92,36 +93,33 @@ class StatementContextVisitor { private boolean processStatement(final int myOffset, final StatementContext ctx) { final Optional optResumed = writer.resumeStatement(myOffset); - final StatementSourceReference ref; if (optResumed.isPresent()) { final ResumedStatement resumed = optResumed.get(); - if (resumed.isFullyDefined()) { - return true; - } - - ref = resumed.getSourceReference(); - } else { - final String keywordTxt = verifyNotNull(ctx.getChild(KeywordContext.class, 0)).getText(); - ref = DeclarationInTextSource.atPosition(sourceName, ctx.getStart().getLine(), - ctx.getStart().getCharPositionInLine()); - final QName def = getValidStatementDefinition(keywordTxt, ref); - if (def == null) { - return false; - } + return resumed.isFullyDefined() || processStatement(ctx, resumed.getSourceReference()); + } - final ArgumentContext argumentCtx = ctx.getChild(ArgumentContext.class, 0); - final String argument = argumentCtx == null ? null : utils.stringFromStringContext(argumentCtx, ref); - writer.startStatement(myOffset, def, argument, ref); + final String keywordTxt = verifyNotNull(ctx.getChild(KeywordContext.class, 0)).getText(); + final Token start = ctx.getStart(); + final StatementSourceReference ref = DeclarationInTextSource.atPosition(sourceName, start.getLine(), + start.getCharPositionInLine()); + final QName def = getValidStatementDefinition(keywordTxt, ref); + if (def == null) { + return false; } + final ArgumentContext argumentCtx = ctx.getChild(ArgumentContext.class, 0); + final String argument = argumentCtx == null ? null : utils.stringFromStringContext(argumentCtx, ref); + writer.startStatement(myOffset, def, argument, ref); + return processStatement(ctx, ref); + } + + private boolean processStatement(final StatementContext ctx, final StatementSourceReference ref) { int childOffset = 0; boolean fullyDefined = true; if (ctx.children != null) { for (ParseTree s : ctx.children) { - if (s instanceof StatementContext) { - if (!processStatement(childOffset++, (StatementContext) s)) { - fullyDefined = false; - } + if (s instanceof StatementContext && !processStatement(childOffset++, (StatementContext) s)) { + fullyDefined = false; } } } -- 2.36.6