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 <robert.varga@pantheon.tech>
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
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;
import java.util.Optional;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
private Multimap<ModelProcessingPhase, OnPhaseFinished> phaseListeners = ImmutableMultimap.of();
private Multimap<ModelProcessingPhase, ContextMutation> phaseMutation = ImmutableMultimap.of();
private Multimap<ModelProcessingPhase, OnPhaseFinished> phaseListeners = ImmutableMultimap.of();
private Multimap<ModelProcessingPhase, ContextMutation> phaseMutation = ImmutableMultimap.of();
- private List<Mutable<?, ?, ?>> effective = ImmutableList.of();
+ private List<StatementContextBase<?, ?, ?>> effective = ImmutableList.of();
private List<StmtContext<?, ?, ?>> effectOfStatement = ImmutableList.of();
private @Nullable ModelProcessingPhase completedPhase;
private List<StmtContext<?, ?, ?>> effectOfStatement = ImmutableList.of();
private @Nullable ModelProcessingPhase completedPhase;
- final Iterator<Mutable<?, ?, ?>> iterator = effective.iterator();
+ final Iterator<StatementContextBase<?, ?, ?>> iterator = effective.iterator();
while (iterator.hasNext()) {
final Mutable<?, ?, ?> next = iterator.next();
if (statementDef.equals(next.getPublicDefinition()) && statementArg.equals(next.rawStatementArgument())) {
while (iterator.hasNext()) {
final Mutable<?, ?, ?> next = iterator.next();
if (statementDef.equals(next.getPublicDefinition()) && statementArg.equals(next.rawStatementArgument())) {
* if statement parameter is null
*/
public void addEffectiveSubstatement(final Mutable<?, ?, ?> substatement) {
* if statement parameter is null
*/
public void addEffectiveSubstatement(final Mutable<?, ?, ?> substatement) {
+ verifyStatement(substatement);
beforeAddEffectiveStatement(1);
beforeAddEffectiveStatement(1);
- effective.add(substatement);
+ effective.add((StatementContextBase<?, ?, ?>) substatement);
* if statement parameter is null
*/
public void addEffectiveSubstatements(final Collection<? extends Mutable<?, ?, ?>> statements) {
* if statement parameter is null
*/
public void addEffectiveSubstatements(final Collection<? extends Mutable<?, ?, ?>> statements) {
- if (statements.isEmpty()) {
- return;
+ if (!statements.isEmpty()) {
+ statements.forEach(StatementContextBase::verifyStatement);
+ beforeAddEffectiveStatement(statements.size());
+ effective.addAll((Collection<? extends StatementContextBase<?, ?, ?>>) 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) {
}
private void beforeAddEffectiveStatement(final int toAdd) {
for (final StatementContextBase<?, ?, ?> child : mutableDeclaredSubstatements()) {
finished &= child.tryToCompletePhase(phase);
}
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);