From 74b6b4a6e1b0125549326946a681dd1e08748f23 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 14 Feb 2020 15:10:22 +0100 Subject: [PATCH] EffectiveStatements track StatementContextBase While StatementContextBase.effective is declared to hold Mutable contexts, in reality it should only ever hold StatementContextBase (or whatever is the lowest reactor base class). Add explicit verification, allowing us to eliminate an instanceof check in completeChildren(). JIRA: YANGTOOLS-1082 Change-Id: Ic25d056492dba49e2dd8042d3de9e79443369738 Signed-off-by: Robert Varga --- .../stmt/reactor/StatementContextBase.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 3e39fd345f..b6de0d775a 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -30,7 +30,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; import java.util.Optional; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; @@ -141,7 +140,7 @@ public abstract class StatementContextBase, E private Multimap phaseListeners = ImmutableMultimap.of(); private Multimap phaseMutation = ImmutableMultimap.of(); - private List> effective = ImmutableList.of(); + private List> effective = ImmutableList.of(); private List> effectOfStatement = ImmutableList.of(); private @Nullable ModelProcessingPhase completedPhase; @@ -437,7 +436,7 @@ public abstract class StatementContextBase, E return; } - final Iterator> iterator = effective.iterator(); + final Iterator> iterator = effective.iterator(); while (iterator.hasNext()) { final Mutable next = iterator.next(); if (statementDef.equals(next.getPublicDefinition()) && statementArg.equals(next.rawStatementArgument())) { @@ -471,8 +470,9 @@ public abstract class StatementContextBase, E * if statement parameter is null */ public void addEffectiveSubstatement(final Mutable substatement) { + verifyStatement(substatement); beforeAddEffectiveStatement(1); - effective.add(substatement); + effective.add((StatementContextBase) substatement); } /** @@ -485,13 +485,15 @@ public abstract class StatementContextBase, E * if statement parameter is null */ public void addEffectiveSubstatements(final Collection> statements) { - if (statements.isEmpty()) { - return; + if (!statements.isEmpty()) { + statements.forEach(StatementContextBase::verifyStatement); + beforeAddEffectiveStatement(statements.size()); + effective.addAll((Collection>) statements); } + } - statements.forEach(Objects::requireNonNull); - beforeAddEffectiveStatement(statements.size()); - effective.addAll(statements); + private static void verifyStatement(final Mutable stmt) { + verify(stmt instanceof StatementContextBase, "Unexpected statement %s", stmt); } private void beforeAddEffectiveStatement(final int toAdd) { @@ -542,10 +544,8 @@ public abstract class StatementContextBase, E for (final StatementContextBase child : mutableDeclaredSubstatements()) { finished &= child.tryToCompletePhase(phase); } - for (final Mutable child : effective) { - if (child instanceof StatementContextBase) { - finished &= ((StatementContextBase) child).tryToCompletePhase(phase); - } + for (final StatementContextBase child : effective) { + finished &= child.tryToCompletePhase(phase); } return finished; } -- 2.36.6