Split StatementContextVisitor.processStatement() 92/87692/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 13 Feb 2020 10:38:30 +0000 (11:38 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 13 Feb 2020 22:44:33 +0000 (23:44 +0100)
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 <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java

index 9e1c4f10005e79eb4d0bfeff10e26fb343957400..1b44c0f4efc7dbbe26dc3fb395e9c0670aacfe3a 100644 (file)
@@ -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<? extends ResumedStatement> 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;
                 }
             }
         }