BUG-7052: reduce StatementContextBase proliferation even more
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / AugmentStatementImpl.java
index 7822c05c4c44612f8acca11e35c02b8af96712e5..e99dd91b0ddfa6f24388b71bf109d95ca2bcad49 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
 import com.google.common.base.Verify;
-import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -105,7 +105,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
 
         @Override
         public void onFullDefinitionDeclared(
-                final StmtContext.Mutable<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
+                final Mutable<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
             if (!augmentNode.isSupportedByFeatures()) {
                 return;
             }
@@ -211,16 +211,16 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
             final boolean skipCheckOfMandatoryNodes = YangVersion.VERSION_1_1.equals(sourceCtx.getRootVersion())
                     && isConditionalAugmentStmt(sourceCtx);
 
-            final Collection<StatementContextBase<?, ?, ?>> declared = sourceCtx.declaredSubstatements();
-            final Collection<StatementContextBase<?, ?, ?>> effective = sourceCtx.effectiveSubstatements();
-            final Collection<StatementContextBase<?, ?, ?>> buffer = new ArrayList<>(declared.size() + effective.size());
+            final Collection<? extends Mutable<?, ?, ?>> declared = sourceCtx.mutableDeclaredSubstatements();
+            final Collection<? extends Mutable<?, ?, ?>> effective = sourceCtx.mutableEffectiveSubstatements();
+            final Collection<Mutable<?, ?, ?>> buffer = new ArrayList<>(declared.size() + effective.size());
 
-            for (final StatementContextBase<?, ?, ?> originalStmtCtx : declared) {
+            for (final Mutable<?, ?, ?> originalStmtCtx : declared) {
                 if (originalStmtCtx.isSupportedByFeatures()) {
                     copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes);
                 }
             }
-            for (final StatementContextBase<?, ?, ?> originalStmtCtx : effective) {
+            for (final Mutable<?, ?, ?> originalStmtCtx : effective) {
                 copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes);
             }
 
@@ -242,13 +242,13 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                     && StmtContextUtils.findFirstSubstatement(ctx, WhenStatement.class) != null;
         }
 
-        private static void copyStatement(final StatementContextBase<?, ?, ?> original,
-                final StatementContextBase<?, ?, ?> target, final CopyType typeOfCopy,
-                final Collection<StatementContextBase<?, ?, ?>> buffer, final boolean skipCheckOfMandatoryNodes) {
+        private static void copyStatement(final Mutable<?, ?, ?> original, final StatementContextBase<?, ?, ?> target,
+                final CopyType typeOfCopy, final Collection<Mutable<?, ?, ?>> buffer,
+                final boolean skipCheckOfMandatoryNodes) {
             if (needToCopyByAugment(original)) {
                 validateNodeCanBeCopiedByAugment(original, target, typeOfCopy, skipCheckOfMandatoryNodes);
 
-                final StatementContextBase<?, ?, ?> copy = original.createCopy(target, typeOfCopy);
+                final Mutable<?, ?, ?> copy = original.createCopy(target, typeOfCopy);
                 buffer.add(copy);
             } else if (isReusedByAugment(original)) {
                 buffer.add(original);
@@ -268,10 +268,11 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                 checkForMandatoryNodes(sourceCtx);
             }
 
-            final List<StatementContextBase<?, ?, ?>> targetSubStatements = new Builder<StatementContextBase<?, ?, ?>>()
-                    .addAll(targetCtx.declaredSubstatements()).addAll(targetCtx.effectiveSubstatements()).build();
+            final List<Mutable<?, ?, ?>> targetSubStatements = ImmutableList.<Mutable<?, ?, ?>>builder()
+                    .addAll(targetCtx.mutableDeclaredSubstatements()).addAll(targetCtx.mutableEffectiveSubstatements())
+                    .build();
 
-            for (final StatementContextBase<?, ?, ?> subStatement : targetSubStatements) {
+            for (final Mutable<?, ?, ?> subStatement : targetSubStatements) {
                 final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx
                         .getPublicDefinition().getDeclaredRepresentationClass());
                 final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement