Next round of yang-parser-impl checkstyle fixes
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / AugmentStatementImpl.java
index 50e6a73e33d33e3e3d306ceb4c6d0c11a79a2870..9bceed925ad8c6782df94fa43fcf4eb39a8fafd3 100644 (file)
@@ -8,11 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
 import com.google.common.base.Verify;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.regex.Pattern;
@@ -28,7 +26,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
@@ -39,6 +36,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace;
@@ -74,8 +72,8 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
         super(context);
     }
 
-    public static class Definition extends
-            AbstractStatementSupport<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> {
+    public static class Definition extends AbstractStatementSupport<SchemaNodeIdentifier, AugmentStatement,
+            EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> {
 
         public Definition() {
             super(YangStmtMapping.AUGMENT);
@@ -99,13 +97,14 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
 
         @Override
         public EffectiveStatement<SchemaNodeIdentifier, AugmentStatement> createEffective(
-                final StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
+                final StmtContext<SchemaNodeIdentifier, AugmentStatement,
+                EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
             return new AugmentEffectiveStatementImpl(ctx);
         }
 
         @Override
-        public void onFullDefinitionDeclared(
-                final Mutable<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
+        public void onFullDefinitionDeclared(final Mutable<SchemaNodeIdentifier, AugmentStatement,
+                EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
             if (!augmentNode.isSupportedByFeatures()) {
                 return;
             }
@@ -118,12 +117,14 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
 
             final ModelActionBuilder augmentAction = augmentNode.newInferenceAction(
                 ModelProcessingPhase.EFFECTIVE_MODEL);
-            final ModelActionBuilder.Prerequisite<StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq =
+            final Prerequisite<StmtContext<SchemaNodeIdentifier, AugmentStatement,
+                EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq =
                     augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL);
             final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> target =
-                    augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode), SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument());
-            augmentAction.apply(new ModelActionBuilder.InferenceAction() {
+                    augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode),
+                        SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument());
 
+            augmentAction.apply(new ModelActionBuilder.InferenceAction() {
                 @Override
                 public void apply(final ModelActionBuilder.InferenceContext ctx) {
                     final StatementContextBase<?, ?, ?> augmentTargetCtx =
@@ -163,7 +164,6 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                         currentOrder++;
                     }
 
-                    augmentSourceCtx.setOrder(currentOrder);
                     augmentSourceCtx.addToNs(StmtOrderingNamespace.class, YangStmtMapping.AUGMENT, currentOrder);
                 }
 
@@ -175,7 +175,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                     if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) {
                         final StatementContextBase<?, ?, ?> targetNode = Utils.findNode(getSearchRoot(augmentNode),
                                 augmentNode.getStatementArgument());
-                        if (StmtContextUtils.isUnknownNode(targetNode)) {
+                        if (targetNode != null && StmtContextUtils.isUnknownStatement(targetNode)) {
                             augmentNode.setIsSupportedToBuildEffective(false);
                             LOG.warn(
                                     "Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}",
@@ -248,8 +248,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
             if (needToCopyByAugment(original)) {
                 validateNodeCanBeCopiedByAugment(original, target, typeOfCopy, skipCheckOfMandatoryNodes);
 
-                final Mutable<?, ?, ?> copy = original.createCopy(target, typeOfCopy);
-                buffer.add(copy);
+                buffer.add(target.childCopyOf(original, typeOfCopy));
             } else if (isReusedByAugment(original)) {
                 buffer.add(original);
             }
@@ -268,11 +267,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                 checkForMandatoryNodes(sourceCtx);
             }
 
-            final List<Mutable<?, ?, ?>> targetSubStatements = ImmutableList.<Mutable<?, ?, ?>>builder()
-                    .addAll(targetCtx.mutableDeclaredSubstatements()).addAll(targetCtx.mutableEffectiveSubstatements())
-                    .build();
-
-            for (final Mutable<?, ?, ?> subStatement : targetSubStatements) {
+            for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
                 final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx
                         .getPublicDefinition().getDeclaredRepresentationClass());
                 final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement
@@ -295,8 +290,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                  * b) added to augment body also via uses of a grouping and
                  * such sub-statements are stored in effective sub-statements collection.
                  */
-                sourceCtx.declaredSubstatements().forEach(Definition::checkForMandatoryNodes);
-                sourceCtx.effectiveSubstatements().forEach(Definition::checkForMandatoryNodes);
+                sourceCtx.allSubstatementsStream().forEach(Definition::checkForMandatoryNodes);
             }
 
             InferenceException.throwIf(StmtContextUtils.isMandatoryNode(sourceCtx),
@@ -352,8 +346,8 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
             return false;
         }
 
-        private static final Set<YangStmtMapping> NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES, YangStmtMapping.WHEN,
-                YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS);
+        private static final Set<YangStmtMapping> NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES,
+            YangStmtMapping.WHEN, YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS);
 
         public static boolean needToCopyByAugment(final StmtContext<?, ?, ?> stmtContext) {
             return !NOCOPY_DEF_SET.contains(stmtContext.getPublicDefinition());